Linux sudo:未找到命令
我正试图以另一个用户的身份使用Linux sudo:未找到命令,linux,ubuntu,sudo,gnu-screen,Linux,Ubuntu,Sudo,Gnu Screen,我正试图以另一个用户的身份使用sudo执行screen 我正在使用命令: echo 'userpassword' | /usr/bin/sudo -u 'myuser' -S '/usr/bin/screen -ls' 在internet上找到的任何帮助都表明,sudo清除环境变量(如PATH)。因此,我决定使用应用程序的完整路径,但仍然会出现命令未找到错误 错误: sudo: /usr/bin/screen -ls: command not found Sudo安装在系统上。 屏幕安装在系
sudo
执行screen
我正在使用命令:
echo 'userpassword' | /usr/bin/sudo -u 'myuser' -S '/usr/bin/screen -ls'
在internet上找到的任何帮助都表明,sudo
清除环境变量(如PATH
)。因此,我决定使用应用程序的完整路径,但仍然会出现命令未找到错误
错误:
sudo: /usr/bin/screen -ls: command not found
Sudo安装在系统上。
屏幕安装在系统上
对于sudo
,我尝试了-E
和-H
标志,但没有任何帮助
我尝试使用如下方式设置PATH
变量:
... | /usr/bin/sudo -u 'myuser' -S 'env PATH=$PATH; /usr/bin/screen -ls'
假定在命令执行之前,$PATH
会展开,但我遇到了其他错误
有人能提供一个命令,让我以另一个用户的身份执行命令,并解释命令的每个部分都做了什么,以便我能理解它吗
谢谢。似乎不需要将命令封装在引号中,没有引号甚至可以工作
echo'userpassword'|/usr/bin/sudo-u'myuser'-S屏幕-ls
试试看
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH
您可能在尝试设置新的path变量时替换了path变量
接下来,请在添加新的PATH变量之前执行“echo$PATH”。此问题可能更适合StackExchange站点,或者请更新问题以显示准确的(复制并粘贴)错误消息。顺便说一句,
sudo
没有完全重置$PATH
;在我的系统中,它将其设置为/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/usr/bin:/sbin:/bin
,我投票将此问题作为离题题结束,因为它不是编程问题。试试看。好的,我会把它移到那里。sudo
正在尝试将整个字符串env PATH=$PATH….
作为单个命令而不是命令和参数来查找<代码>sudo会重置路径。在我的测试sudo env
中,结果是PATH=/sbin:/bin:/usr/sbin:/usr/bin
,我的路径与此完全不同。试试sudo-u'myuser'-S PATH=$PATH/usr/bin/screen-ls。注意命令中没有引号。删除命令周围的引号有效。但是为什么呢?传入的命令是一个参数,我使用PHP中的escapeshellarg函数对其进行了转义。@BradleyOdell-escapeshellarg()
将转义引号之间的所有空格。@alvits我不这么认为。它只是在它的周围加上了单引号。@BradleyOdell-oops。我的意思是说它逃避了现有的引用。我应该从这里复制并粘贴文本