2016-07-21 3 views
1

В настоящее время я работаю над сценарием оболочки для среды Mac малого бизнеса. Цель сценария - добавить несколько приложений в док-станцию.Mac 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 

Update:

Я попытался выполнить команду «значения по умолчанию», а в Баш (т.е. «Судо Баш»), и это не представляется, любой эффект.

Когда я запускаю ту же самую команду в обычном терминале, она работает.

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>' 
+0

Терминал запускает оболочку. Вы должны быть более конкретными, когда сбой сценария. –

+0

Это не имеет никакого смысла. Я предполагаю, что когда вы говорите «запуск сценария», вы имеете в виду запуск их из терминала при входе в систему в обычном режиме? – Droppy

+0

Я могу напечатать каждую строку этого сценария оболочки в окне терминала, вошедшего в систему как администратор, и каждая строка работает индивидуально. Когда я помещаю каждую строку в сценарий оболочки и пытаюсь выполнить сценарий оболочки через терминал. т. е. «sudo ./script.sh» только команда killall Dock работает, ничего другого не меняется. – user1553006

ответ

2

Команда по умолчанию изменяет параметры для конкретного пользователя. Когда вы используете sudo, вы запускаете команду по умолчанию, а не как текущий пользователь, а как другой пользователь (т. Е. Root).

Из вашего описания это звучит так, как по умолчанию меняется настройки для пользователя root (потому что это тот, кто sudo запускает его как), поэтому, когда Dock перезагружается (и запускается как текущий пользователь), он не видит никаких настроек изменения.

Не должно быть оснований для использования sudo в вашем конкретном случае. Пользователь может изменять свои собственные настройки без специальных разрешений, а Dock также запускается как текущий пользователь и поэтому может быть убит. Поэтому просто запустите скрипт (например, sh script.sh), и он должен работать.

Если у вас все еще есть проблемы, я вернусь именно с тем, что вы набираете, и выходом defaults read ... после запуска.

+0

Я также вижу такое же поведение. В моем случае я фактически сплю несколько секунд, а затем прочитаю значение обратно. Кроме того, я не переключу пользователей. Выполнение записи «defaults write» внутри скрипта оболочки не влияет. –