可以在“ su”命令中忽略用户shell吗?


9

如果我做

su - -c 'mkdir bin' user1

然后我得到

su: /usr/bin/ksh: No such file or directory

因为用户shell设置为ksh/etc/passwdksh未安装。

在这种情况下,如何以用户身份执行命令?


为什么将用户的shell设置为不存在的东西?
MDMarra 2012年

1
/etc/passwd来自NIS。
桑德拉(Sandra)2012年

1
嗯,这解释了这一点。
MDMarra 2012年

Answers:


18

如果您不输入-after,su那么它将不会加载该用户的环境,但是命令仍将以该用户身份运行。


看来我误解了您的实际问题。正如其他人所说-s的那样,您可能实际上是想要的选择。


那仍然会尝试使用/ etc / passwd中的shell,这似乎是更大的问题。
2012年

shell将自己的标识放入$ SHELL环境变量中,但是su在/ etc / passwd中查找要运行的shell。`-`传递给shell调用,告诉它充当“登录” shell(bash运行配置文件而不是bashrc文件,更改工作目录等)
2012年

8

您可以使用:

su -s /bin/sh -c 'mkdir bin' user1

-ssu 的选项指定要使用的外壳,覆盖/ etc / passwd中的所有内容。

-从您的命令中删除了,因为除了加载配置文件之外,它还可能将工作目录更改为该命令的用户的主目录,因此您将在user1的主目录中创建“ bin”,而不是当前目录目录。


5

我相信su的-s /-shell选项可让您选择要使用的shell,同时保留用户环境的其他部分,/ bin / sh由posix指定,因此应随处可用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.