更改为 sudo 时保持在同一工作目录

Use*_*841 33 shell directory sudo

在命令行上工作时,我经常使用sudo -i. 但是,我的工作目录会自动更改为/root. 我永远不想去那里;我想呆在原地!我怎样才能做到这一点?

Lev*_*von 36

您可以改用sudo -s它,它不会将您当前的目录更改为/root,尽管您的某些环境变量不会是 root 的环境变量。

来自 Ubuntu 论坛的这个页面有一个很好的总结:

Summary of the differences found   
                                               corrupted by user's 
                HOME=/root      uses root's PATH     env vars
sudo -i         Y               Y[2]                 N
sudo -s         N               Y[2]                 Y
sudo bash       N               Y[2]                 Y
sudo su         Y               N[1]                 Y
Run Code Online (Sandbox Code Playgroud)

来自 Ubuntu 文档的这个页面有更多关于 sudo 的背景信息


小智 14

如果要使用su,有一种方法可以留在同一目录中。

su - user -c "cd `pwd`; bash"

这里发生了什么:

  • su - user = 登录为 user
  • -c 这意味着“在新用户的 shell 中运行命令”
  • -c "cd `pwd`"我们给出的命令是切换到当前目录 ( `pwd`) - 但是因为我们使用双引号中的反引号,所以pwd在我们运行su命令之前会评估该命令,因此我们实际上切换到我们现在所在的目录作为旧目录用户。

    • 相比之下,-c 'cd `pwd`'pwd在新的 shell 中执行命令,所以这将评估为cd /root,当然,这不会完成任何事情。

    这里唯一的问题是新的 shell 在运行命令后立即退出,所以我们添加:

  • -c "cd `pwd`; bash"这意味着“bash在运行cd命令后运行(新 shell)。bash shell 在我们注销之前不会退出。

请注意,您可以替换`pwd`$(pwd). 它们在功能上是相同的,但是大量的类似引号的字符可能变得难以阅读。