zsh=/bin/zsh
sh -c "echo $zsh >> /etc/shells"
sh: /etc/shells: Permission denied
好的,很好。如果我添加sudo
,它就起作用了。很好。
zsh=/bin/zsh
sudo sh -c "echo $zsh >> /etc/shells"
但是如果我使用(手动open
添加),那么即使我已经使用,尝试编辑该文件也会弹出一个对话框,提示我无法编辑它:/bin/zsh
/etc/shells
sudo
sudo sh -c 'open /etc/shells'
您不拥有文件“shells”,也没有权限对其进行写入。
您可以复制此文档并编辑副本。只有副本才会包含您的更改。
这是为什么?命令有什么问题sudo sh -c 'open /etc/shells'
?
macOS 命令
open
实际上不会自行启动编辑器。相反,它会要求macOS 启动服务来执行此操作。您的登录会话的启动服务组件以您的常规用户帐户运行,因此无法以 root 权限启动编辑器。使用
sudo
命令open
以 root 权限发出请求不会改变这一事实。似乎没有办法向启动服务
root
请求添加一个属性来有效地说“请启动以...身份打开此文件的应用程序” ,即使有,启动服务似乎也没有能力以 root 身份运行。命令
sudoedit
(man sudoedit
)解决了这个问题。首先,设置
sudoedit
:在您的 中
~/.bashrc
添加:然后
source ~/.bashrc
。这样就完成了
sudoedit
设置。然后你就可以了
sudoedit /etc/shells
。root
,sudoedit
对要编辑的文件创建临时副本。$USER
调用。$VISUAL
$EDITOR
root
编辑成功时,将临时文件复制回要编辑的文件。我在手册页中找不到任何解释此行为的内容,但我猜测它正在解析图形登录的用户是谁,并尝试以该用户的身份打开文件,即使它被包裹在 sudo 执行层中。也就是说,它并没有真正尝试以 root 用户身份打开文件。
强烈建议不要以 sudo 身份运行图形命令,因此我猜这种行为是故意阻止您这样做。
这个线程可能有助于澄清其中的一些原因。