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

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top