Domanda

Il seguente domanda si riferisce a una risposta che è stato pubblicato il questa domanda :

mi piace l'idea di creare la mia propria funzione che si apre un nuovo terminale, in modo lo script che Craig Walker legata a in quella domanda sopra citato adatta alle mie esigenze. La sceneggiatura, scritta da Mark Liyanage, si trova qui.

Questo script è questo:

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

Ho fatto una modifica allo script sul sito collegato; Ho commentato la riga che le uscite "$ COMANDO $ EXIT" per eliminare alcuni verbosità. Tuttavia, quando si esegue lo script ho ancora ottenere questo output

tab 1 of window id 2835

appena prima che apre la nuova finestra ed esegue il comando che mi passa. Tutte le idee perché questo sarebbe successo? (I provato a spostare il reindirizzamento di stderr a / dev / null prima della chiamata a oascript, ma che ha fatto alcuna differenza.)

È stato utile?

Soluzione

tab 1 of window 2835 è la rappresentazione AppleScript dell'oggetto restituito dal comando do script: è l'istanza tab creato per eseguire il comando. osascript restituisce i risultati della esecuzione dello script standard output. Dal momento che non v'è alcun return esplicito nello script AppleScript, il valore restituito l'intero script è il risultato dell'ultima-eseguito dichiarazione, normalmente il comando do script. Le due correzioni più semplici sono o di reindirizzamento stdout del osascript (e preferibilmente non stderr reindirizzamento in caso di errori):

osascript >/dev/null <<EOF

o inserire una return esplicito (senza valore) in AppleScript.

tell application "Terminal"
    activate
    do script with command "$COMMAND $EXIT"
end tell
return
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top