Mac Shell - 命令在终端中工作但在Shell中不起作用

时间:2016-07-21 13:38:57

标签: macos shell terminal

我目前正在为小型企业Mac环境开发shell脚本。该脚本的目的是向Dock添加一些应用程序。

我可以单独通过终端运行命令,但我无法在shell脚本中运行它们。该脚本仅完成“killall Dock”命令,没有错误或警告。

这是我尝试的代码:

#!/bin/sh
defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/Applications/Firefox.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'
defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/Applications/Calculator.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'
defaults write com.apple.dock persistent-others -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/Users/Shared/RMS.fmp12</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'

killall Dock
exit 0

更新

我尝试在bash中执行'defaults'命令(即'sudo bash')并且它似乎没有任何效果。

当我在普通终端中运行完全相同的命令时,它可以工作。

defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/Applications/Firefox.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'

1 个答案:

答案 0 :(得分:1)

默认值命令可更改特定用户的设置。当你使用sudo时,你运行defaults命令,而不是当前用户,而是另一个用户(即root)。

根据你的描述,听起来默认是更改root用户的设置(因为这是sudo让它运行的那个)所以当Dock重新启动(并作为当前用户运行)时,它没有看到任何设置更改。

在您的特定情况下,没有理由使用sudo。用户可以在没有特殊权限的情况下更改自己的设置,Dock也可以作为当前用户运行,因此可以被杀死。因此,只需运行脚本(例如sh script.sh)就可以了。

如果您仍然遇到问题,我会在运行后准确地回复您输入的内容和defaults read ...的输出。