Su -c 不起作用并被忽略

Su -c 不起作用并被忽略

据解释,如果我们使用suwith-c参数,它将把命令传递到用户的 shell 并执行它。

但在我的环境中,它完全忽略该-c选项并更改用户的外壳。

[root@mftf~]# su - demo -c "ls -la"

[demo@mftf~]$

但如果我在没有任何命令的情况下使用,它将显示需要参数-c的错误,因此它不会被忽略。我使用的是 RHEL 7。-c

答案1

使用-(或-l) 时,您可以为指定用户调用交互式登录 shell。

根据 shell 初始化文件对给定用户执行的操作,该命令可能不会被执行。例如,如果他们使用exec(不从调用 shell 传递命令行参数)直接或通过类似tmux或 的方式重新执行 shell ssh-agent,则命令字符串将丢失。

例如:我有

if tmux has-session; then
    exec tmux attach-session
else
    exec tmux
fi

...在 my 中~/.profile,这就是为什么su -l me some_command不会执行some_command(相反,在 内部启动了一个交互式 shell tmux)。

要以另一个用户身份执行命令,su只需使用 do

# su -c some_command username

来自 Ubuntusu(1)手册:

-, -l,--login

提供类似于用户直接登录时所期望的环境。


或者设置sudo并使用

$ sudo -u user some_command

答案2

不要在 su 之后使用 -(连字符)。只需运行
su demo -c 'ls -la'
当您使用 su 调用“-”时,它会初始化用户配置文件和环境。配置文件中必须有一些脚本不允许用户 shell 到达末尾。

相关内容