我有一个简单的bash shell脚本:
user_exists=cat /etc/passwd | grep 'GNU Mailman'
echo $user_exists
当我使用sudo ./'script_name'
运行此脚本时,我在尝试访问 / etc / passwd 的行上收到权限被拒绝错误。我在这里做错了什么?
答案 0 :(得分:2)
要了解原因,您必须按照bash
查看该行的方式查看该行:
user_exists=cat /etc/passwd | grep 'GNU Mailman'
根据bash,您(暂时)将环境变量user_exists
设置为值cat
。使用该值设置,然后执行程序/etc/passwd
并将其输出发送到grep 'GNU Mailman'
。由于/etc/passwd
没有执行权限,因此该命令因缺少权限而失败。
解决方案是使用正确的格式进行过程替换,如Vladimir Kolesnikov所述:
user_exist=$(grep 'GNU Mailman' /etc/passwd)
答案 1 :(得分:1)
user_exists=$(cat /etc/passwd | grep 'GNU Mailman')
或更好,
getent passwd username