在目录内运行 sudo 命令

在目录内运行 sudo 命令

可能的解决方案包括:

  1. 开始交互式会话。

    sudo -s <<< "cd dir ; command"
    

    或者

    sudo /bin/bash -c "cd dir ; command"
    

    但是我没有 /bin/bash /bin/sh /bin/su 或其他 sudoer 权限

  2. 在 sudo 完成之前更改目录。

    cd dir ; sudo command
    

    但我没有权限进入该目录。

  3. 我需要一个一般情况的 pwd 集(比如 Popen cwd),所以下面不是我可以使用的答案:

    sudo command /path/to/file
    

我正在尝试编写带有 sudo=True/False 选项的 python Popen 包装器,目前我正尝试以某种方式让 cwd 参数起作用。

答案1

我不确定更大的图景是什么,但你的方法应该是使用以下命令运行目录中的文件。例如,如果您想运行grep regex filewhere fileis in /root,那么您应该按如下方式操作:

$ sudo grep regex /root/file

不是

$ sudo 'cd /root; grep regex file'
sudo: cd /root; grep regex file: command not found

为什么会出现这样的输出?这是因为这是 shell 语法,而 sudo 不会在另一个交互式 shell 中运行该命令。

另一种方法是改变环境变量PWD,如下所示:

$ sudo -i PWD=/root grep regex file

答案2

sudo对我来说,和的组合screen是有效的:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

此命令首先切换到vagrant用户。然后,vagrant将目录更改为/vagrant并执行npm install

相关内容