我想代表另一个用户在 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 次 |
| 最近记录: |