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

San*_*dra 10 linux ubuntu bash centos

如果我做

su - -c 'mkdir bin' user1
Run Code Online (Sandbox Code Playgroud)

然后我得到

su: /usr/bin/ksh: No such file or directory
Run Code Online (Sandbox Code Playgroud)

因为用户 shell 设置为kshin/etc/passwd并且ksh未安装。

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

MDM*_*rra 18

如果您不放置-aftersu则它不会加载该用户的环境,但命令仍将以该用户身份运行。


看来我误解了你的实际问题。正如其他人所说,这-s是您可能真正想要的选项。


fre*_*eit 12

您可以使用:

su -s /bin/sh -c 'mkdir bin' user1
Run Code Online (Sandbox Code Playgroud)

-s选项苏指定外壳使用,覆盖无论是在/ etc / passwd文件。

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


小智 5

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