我正在尝试使用sudo命令以另一个用户的身份执行screen。
我使用的命令是:
任何在互联网上找到的帮助都说
错误:
我使用的命令是:
echo 'userpassword' | /usr/bin/sudo -u 'myuser' -S '/usr/bin/screen -ls'
任何在互联网上找到的帮助都说
sudo
会清除环境变量(如PATH
)。因此,我决定使用应用程序的完整路径,但仍然出现命令未找到的错误。错误:
sudo: /usr/bin/screen -ls: command not found
系统上已安装“sudo”和“screen”。
对于“sudo”,我尝试使用“-E”和“-H”标志,但没有帮助。
我尝试使用如下命令设置“PATH”变量:
... | /usr/bin/sudo -u 'myuser' -S 'env PATH=$PATH; /usr/bin/screen -ls'
据说在命令执行之前,$PATH
应该被展开,但是我遇到了其他错误...
有人能提供一个命令,让我可以以另一个用户的身份执行命令,并解释命令的每个部分,以便我可以理解吗?
谢谢。
sudo
并不能完全重置$PATH
;在我的系统上,它将其设置为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
。 - Keith Thompsonsudo
正试图将整个字符串env PATH=$PATH....
作为单个命令而不是命令和参数来查找。sudo
会重置PATH
。在我的测试中,sudo env
的结果是PATH=/sbin:/bin:/usr/sbin:/usr/bin
,而我的PATH
完全不同。请尝试sudo -u 'myuser' -S PATH=$PATH /usr/bin/screen -ls
。请注意命令中没有引号。 - alvits