2016-07-21 7 views
1

Ich arbeite derzeit an einem Shell-Skript für eine kleine Firma Mac-Umgebung. Die Absicht des Skripts besteht darin, dem Dock ein paar Anwendungen hinzuzufügen.Mac Shell - Befehl funktioniert in Terminal aber nicht in Shell

Ich kann die Befehle über Terminal einzeln ausführen, aber ich kann sie nicht in einem Shell-Skript ausführen. Das Skript beendet nur den "killall Dock" -Befehl, keine Fehler oder Warnungen.

Dies ist der Code, den ich versucht:

#!/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:

ich den Befehl 'defaults' auszuführen versucht, während in bash (dh 'sudo bash'), und es scheint nicht über irgendein Effekt.

Wenn ich den gleichen Befehl in einem normalen Terminal ausführen, funktioniert es.

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

Terminal führt die Shell aus. Sie müssen genauer angeben, wann das Skript fehlschlägt. –

+0

Das ergibt keinen Sinn. Ich nehme an, wenn Sie "das Skript ausführen" sagen, Sie meinen, sie vom Terminal aus auszuführen, während Sie normalerweise eingeloggt sind? – Droppy

+0

Ich kann jede Zeile dieses Shell-Skripts in ein Terminalfenster eingeben, während ich als Administrator angemeldet bin und jede Zeile einzeln arbeitet. Wenn ich jede Zeile in ein Shell-Skript platzieren und versuchen, das Shell-Skript über Terminal auszuführen. d. h. "sudo ./script.sh" scheint nur der killall Dock-Befehl zu funktionieren, nichts anderes ändert sich. – user1553006

Antwort

2

Der Standardbefehl ändert die Einstellungen für einen bestimmten Benutzer. Wenn Sie sudo verwenden, führen Sie den Standardbefehl aus, nicht als aktueller Benutzer, sondern als anderer Benutzer (d. H. Root).

Von Ihrer Beschreibung klingt es wie Standards ändert die Einstellungen für den Benutzer root (weil das ist, wo sudo macht es als ausgeführt), so wenn Dock neu gestartet wird (und als der aktuelle Benutzer ausgeführt) es keine Einstellungen zu sehen Änderungen.

Es sollte keinen Grund geben, sudo in Ihrem speziellen Fall zu verwenden. Ein Benutzer kann seine eigenen Einstellungen ohne spezielle Berechtigungen ändern und Dock wird auch als der aktuelle Benutzer ausgeführt und kann daher getötet werden. Führen Sie dazu einfach das Skript aus (z. B. sh script.sh) und es sollte funktionieren.

Sollten Sie immer noch Probleme haben, würde ich wieder mit genau dem kommen, was Sie eingeben und die Ausgabe von defaults read ... nach dem Ausführen.

+0

Ich sehe auch das gleiche Verhalten. In meinem Fall schlafe ich tatsächlich ein paar Sekunden und lese dann den Wert zurück. Außerdem wechsle ich nicht Benutzer. Das Ausführen von "defaults write" innerhalb eines Shell-Skripts hat keine Auswirkungen. –