使用 sudo 作为另一个用户运行 cd 时遇到问题

cof*_*Mug 12 sudo cd-command

我想代表另一个用户在 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)

  • 这不会真正做任何有用的事情——shell 将在`cd` 之后立即退出。OP 可能需要 `sudo -i`。 (2认同)

Gil*_*il' 5

cd不是外部命令,它只是一个内置的shell,所以sudo不能执行它。之所以cd只作为shell内建存在是因为一个进程不能影响另一个进程的当前目录;因此改变当前目录并立即退出的程序是没有用的。(几乎没用:cd程序会返回一个状态,表明它是否成功。)

如果您想切换到一个目录,然后以另一个用户的身份运行命令,请运行执行所有这些操作的 shell。

sudo -u SOMEUSER sh -c 'cd /path/to/directory && dosomething'
Run Code Online (Sandbox Code Playgroud)