我想代表另一个用户在 shell 上运行一个命令。命令如下:
sudo -u USER cd /home/USER
Run Code Online (Sandbox Code Playgroud)
我得到
sudo: cd: command not found
Run Code Online (Sandbox Code Playgroud)
传递给 sudo 的命令的正确语法是什么?
kwo*_*orr 14
cd
是一个shell 内置的。您需要调用 shell 来执行 shell 内置命令:
sudo -u USER sh -c 'cd /home/USER'
Run Code Online (Sandbox Code Playgroud)
或者
sudo -u USER bash -c 'cd /home/USER'
Run Code Online (Sandbox Code Playgroud)
cd
不是外部命令,它只是一个内置的shell,所以sudo
不能执行它。之所以cd
只作为shell内建存在是因为一个进程不能影响另一个进程的当前目录;因此改变当前目录并立即退出的程序是没有用的。(几乎没用:cd
程序会返回一个状态,表明它是否成功。)
如果您想切换到一个目录,然后以另一个用户的身份运行命令,请运行执行所有这些操作的 shell。
sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
31947 次 |
最近记录: |