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.)

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top