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。我的意思是说它逃避了现有的引用。我应该从这里复制并粘贴文本