2010-11-10 9 views
3

Следующий вопрос связан с ответом, который был размещен на this question:Как я могу избавиться от этого вывода osascript?

Мне нравится понятие создания моей собственной функции, которая открывает новый терминал, так что сценарий, который Craig Walker связан с тем, что выше ссылочного вопрос подходит мой необходимо. Сценарий, написанный Марком Liyanage, найден here.

Этот сценарий заключается в следующем:

#!/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; [email protected]" 
#echo "$COMMAND $EXIT" 

osascript 2>/dev/null <<EOF 
    tell application "Terminal" 
     activate 
     do script with command "$COMMAND $EXIT" 
    end tell 
EOF 

Я сделал одно изменение в сценарии на связанном сайте; Я прокомментировал строку, которая выводит «$ COMMAND $ EXIT», чтобы устранить некоторую многословность. Тем не менее, когда я запускаю сценарий, я все еще получаю этот выход

tab 1 of window id 2835 

непосредственно перед открывает новое окно и выполняет команду, я прохожу в. Любые идеи, почему это будет происходить? (Я пытался переместить редирект на поток ошибок в/DEV/нуль перед вызовом oascript, но это не имеет никакого значения.)

ответ

7

tab 1 of window 2835 является представление AppleScript объекта, возвращаемого командой do script: это tab экземпляр, созданный для выполнения команды. osascript возвращает результаты выполнения скрипта на стандартный вывод. Поскольку в сценарии AppleScript явно нет return, возвращаемое значение всего скрипта является результатом последнего выполненного оператора, как правило, команды do script. Две легкие исправления являются либо перенаправить стандартный вывод о osascript (и предпочтительно не перенаправлять поток ошибок в случае ошибок):

osascript >/dev/null <<EOF 

или вставить явное return (без значения) в AppleScript.

tell application "Terminal" 
    activate 
    do script with command "$COMMAND $EXIT" 
end tell 
return 
+0

Работает как очарование. В исходном скрипте был osascript 2>/dev/null << EOF , который перенаправлял stderr в/dev/null, поэтому я его перевел. Я не думал попробовать перенаправить регулярный вывод на/dev/null ... Спасибо! – barclay

Смежные вопросы