'权限被拒绝'即使以root身份运行

时间:2014-10-02 22:57:12

标签: linux bash

我有一个简单的bash shell脚本:

user_exists=cat /etc/passwd | grep 'GNU Mailman'
echo $user_exists

当我使用sudo ./'script_name'运行此脚本时,我在尝试访问 / etc / passwd 的行上收到权限被拒绝错误。我在这里做错了什么?

2 个答案:

答案 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