macOS 下的 su 缺少 -c 标志?

macOS 下的 su 缺少 -c 标志?

我正在使用 El Capitan 10.11.6,需要使用以用户身份su -c运行。问题是,我的 macOS 版本上没有这个标志。无法代表其他较新版本的 macOS(目前无法访问较新的操作系统)。还有其他选择吗?我需要在脚本和命令行中使用它。psql_postgres

更正一下,比以前更仔细地阅读了手册页后发现su确实有一个-c标志,但是它似乎对我不起作用。运行su _postgres -c 'mkdir /Users/leetbacoon/folder'不起作用,也不会在终端上显示任何内容。

答案1

在我的 Debian 中man 1 su这样写道:

的参数-c将导致大多数命令解释器将下一个参数视为命令。该命令将由/etc/passwd为目标用户指定的 shell 执行。

在 macOS 上,情况很可能是相同的。您提供的用户su可能已/bin/false在 中指定/etc/passwd。这对于系统用户来说很正常。这样就没有人可以直接以此类用户身份登录。这是一件好事。

我猜你是以 root 身份调用该命令,因此没有密码提示。幕后发生的事情是:

/bin/false -c 'mkdir /Users/leetbacoon/folder'

此命令完全无提示,只有其退出代码 ( 1) 表示失败。您的su报告的退出值相同。


使用sudo

sudo -u _postgres mkdir /Users/leetbacoon/folder

_postgres可能不允许在 内创建目录/Users/leetbacoon/。如果是这样,您将收到 的错误mkdir。但mkdir它本身仍会运行。

相关内容