2016-07-21 25 views
1

現在、中小企業のMac環境用のシェルスクリプトを作成しています。スクリプトの目的は、ドックにいくつかのアプリケーションを追加することです。Macシェル - コマンドはターミナルでは動作しますが、シェルでは動作しません

端末経由でコマンドを個別に実行することはできますが、シェルスクリプトで実行することはできません。スクリプトは「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で(すなわち、「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>' 
+0

ターミナルはシェルを実行します。スクリプトがいつ失敗するかについて、より具体的にする必要があります。 –

+0

それは意味をなさない。私はあなたが「スクリプトを実行する」と言ったときに、通常ログインしている間にターミナルから実行することを意味します。 – Droppy

+0

管理者としてログインしている間に、そのシェルスクリプトの各行をターミナルウィンドウに入力することができ、各行は個別に動作します。 私は各行をシェルスクリプトに入れ、ターミナル経由でシェルスクリプトを実行しようとします。すなわち "sudo ./script.sh" killall Dockコマンドだけがうまくいくように見えますが、それ以外の変更はありません。 – user1553006

答えて

2

defaultsコマンドは、特定のユーザーの設定を変更します。 sudoを使うと、現在のユーザーではなく、別のユーザー(root)としてdefaultsコマンドを実行します。

あなたの説明から、デフォルトでrootユーザーの設定が変更されているように聞こえます(sudoが実行されるため)ので、Dockを再起動して(現在のユーザーとして実行すると)、設定が表示されません変更。

特定のケースでsudoを使用する理由はありません。ユーザーは特別な権限を持たずに独自の設定を変更することができ、Dockも現在のユーザーとして実行されるため、そのユーザーを強制終了することができます。したがって、スクリプト(例:sh script.sh)を実行するだけで問題なく動作します。

まだ問題がある場合は、入力した内容と実行後に出力がdefaults read ...に戻ってきます。

+0

私も同じ動作を見ます。私の場合は、実際に数秒間眠ってから値を読み取って戻します。また、私はユーザーを切り替えるつもりはありません。 シェルスクリプト内で "defaults write"を実行しても効果はありません。 –

関連する問題