可能的解决方案包括:
开始交互式会话。
sudo -s <<< "cd dir ; command"
或者
sudo /bin/bash -c "cd dir ; command"
但是我没有 /bin/bash /bin/sh /bin/su 或其他 sudoer 权限
在 sudo 完成之前更改目录。
cd dir ; sudo command
但我没有权限进入该目录。
我需要一个一般情况的 pwd 集(比如 Popen cwd),所以下面不是我可以使用的答案:
sudo command /path/to/file
我正在尝试编写带有 sudo=True/False 选项的 python Popen 包装器,目前我正尝试以某种方式让 cwd 参数起作用。
答案1
我不确定更大的图景是什么,但你的方法应该是使用以下命令运行在目录中的文件。例如,如果您想运行grep regex file
where file
is 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
。