Comment puis-je me débarrasser de cette sortie osascript?
Question
La question suivante concerne une réponse qui a été affichée sur cette question :
Je aime l'idée de créer ma propre fonction qui ouvre un nouveau terminal, de sorte que le script Craig Walker lié à cette question susmentionnée adaptée à mes besoins. Le scénario, écrit par Mark Liyanage, se trouve ici.
Ce script est ceci:
#!/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
J'ai fait un changement au script sur le site lié; Je commentais la ligne que les sorties « $ COMMANDE SORTIE $ » pour éliminer certains verbosité. Cependant, quand je lance le script que je reçois encore cette sortie
tab 1 of window id 2835
juste avant qu'il ouvre la nouvelle fenêtre et exécute la commande que je passe. Toutes les idées pourquoi cela se passerait-il? (J'essayé de déplacer la redirection de stderr vers / dev / null avant l'appel à oascript, mais cela ne fait aucune différence.)
La solution
tab 1 of window 2835
est la représentation AppleScript de l'objet retourné par la commande do script
: il est l'instance de tab
créé pour exécuter la commande. osascript
renvoie les résultats de l'exécution du script à la sortie standard. Comme il n'y a pas return
explicite dans le script AppleScript, la valeur retournée du script entier est le résultat de la dernière instruction exécutée, normalement la commande do script
. Les deux plus simples corrections sont soit stdout redirect du osascript (et de préférence pas stderr en cas redirect d'erreurs):
osascript >/dev/null <<EOF
ou un insert return
explicite (sans valeur) dans le AppleScript.
tell application "Terminal"
activate
do script with command "$COMMAND $EXIT"
end tell
return