Wie kann ich diese osascript Ausgabe loswerden?
Frage
Die folgende Frage bezieht sich auf eine Antwort, die auf diese Frage :
Ich mag die Vorstellung, meine eigene Funktion zu schaffen, die ein neues Terminal eröffnet, so das Skript, dass Craig Walker Frage in dieser oben genannten verknüpfen meine Bedürfnisse. Das Drehbuch, geschrieben von Mark Liyanage, gefunden hier.
Das Skript ist dies:
#!/bin/sh
#
# Open a new Mac OS X terminal window with the command given
# as argument.
#
# - If there are no arguments, the new terminal window will
# be opened in the current directory, i.e. as if the command
# would be "cd `pwd`".
# - If the first argument is a directory, the new terminal will
# "cd" into that directory before executing the remaining
# arguments as command.
# - If there are arguments and the first one is not a directory,
# the new window will be opened in the current directory and
# then the arguments will be executed as command.
# - The optional, leading "-x" flag will cause the new terminal
# to be closed immediately after the executed command finishes.
#
# Written by Marc Liyanage <http://www.entropy.ch>
#
# Version 1.0
#
if [ "x-x" = x"$1" ]; then
EXIT="; exit"; shift;
fi
if [[ -d "$1" ]]; then
WD=`cd "$1"; pwd`; shift;
else
WD="'`pwd`'";
fi
COMMAND="cd $WD; $@"
#echo "$COMMAND $EXIT"
osascript 2>/dev/null <<EOF
tell application "Terminal"
activate
do script with command "$COMMAND $EXIT"
end tell
EOF
habe ich eine Änderung an dem Skript auf der verlinkten Seite; Ich kommentierte die Zeile aus, dass die Ergebnisse „$ COMMAND $ EXIT“ einige Ausführlichkeit zu beseitigen. Allerdings, wenn ich das Skript ausführen ich immer noch diese Ausgabe erhalten
tab 1 of window id 2835
, kurz bevor es öffnet sich das neue Fenster und führt den Befehl aus, dass ich gehe in. Irgendwelche Ideen, warum dies geschieht würde? (Ich habe versucht, die Umleitung von stderr auf / dev / null vor dem Aufruf von oascript bewegen, aber das machte keinen Unterschied.)
Lösung
tab 1 of window 2835
ist die Applescript-Darstellung des Objekts durch den do script
Befehl zurückgegeben: es ist die tab
Instanz erstellt, den Befehl auszuführen. osascript
gibt die Ergebnisse der Ausführung des Skripts auf die Standardausgabe. Da es in dem Applescript-Skript, der zurückgegebene Wert des gesamten Skript ist das Ergebnis der zuletzt ausgeführten Anweisung, in der Regel des return
Befehls keine expliziten do script
ist. Die beiden einfachsten Fixes sind auf beiden Redirect stdout des osascript (und vorzugsweise nicht Umleitung stderr bei Fehlern):
osascript >/dev/null <<EOF
oder Einsatz eines expliziten return
(ohne Wert) in das Applescript.
tell application "Terminal"
activate
do script with command "$COMMAND $EXIT"
end tell
return