当我su -
进入根目录时,当前目录设置为根目录。无论如何,要保留我所在的当前目录,就像sudo -s
。还是使用sudo的答案?
当我su -
进入根目录时,当前目录设置为根目录。无论如何,要保留我所在的当前目录,就像sudo -s
。还是使用sudo的答案?
Answers:
如果可能的话,最好使用sudo,因为这样就不需要知道(或给某人)root的密码。将root密码设置得又长又可怕,然后将其锁定在安全的地方。
如果您想以后拒绝某人访问,只需删除他们对sudo的访问,而不必教其他所有人一个新的root密码。
但是-如果您不想使用'-'参数。您将获得一个shell作为root用户,它将不是登录shell(因此它将不会运行root的.profile)。
asuser git reset --hard
。但是su - <user> -m -c "git reset --hard"
,sudo -u <user> git reset --hard
这会节省我的环境,而git会尝试读取当前用户的git config。因此,我只想声明有时使用su- <user> -c“ cd ; bash”的user205705 解决方案pwd
更好。
.bashrc
从外部用户而不是根用户执行。
如果您确实想使用su
,则可以使用一种方法来保留在同一目录中。
su - <user> -c "cd `pwd`; bash"
这里发生了什么:
su - <user>
=登录为 -c
这意味着“在new的shell中运行命令-c "cd `pwd`"
我们提供的命令是切换到当前direcotory(pwd
)-但由于使用的是反引号,因此pwd
在运行su
命令之前先对命令进行评估,以便实际上以旧用户身份切换到现在位于目录中的目录。唯一的问题是新外壳程序在运行命令后立即退出,因此我们添加:-c "cd `pwd`; bash"
这意味着“ bash
在运行cd
命令后运行(新外壳),并且bash外壳在我们注销之前不会退出。su - [user] -c "cd $(pwd); bash"
可能会稍微好一点(将反引号更改为$()
)。
您必须修改su的来源才能完成此工作。在初始化环境变量的过程中有一个chdir调用。注释掉那些包含该调用的陈述。现在,您可以执行“ su-”,但保留当前目录。