Как я могу избавиться от этого вывода osascript?

Следующий вопрос относится к ответу, который был опубликован на этот вопрос:

Мне нравится идея создания моей собственной функции, которая открывает новый терминал, поэтому сценарий, на который ссылался Крейг Уокер в вышеупомянутом вопросе, соответствовал моим потребностям. Сценарий, написанный Марком Лиянажем, можно найти здесь.< /а>

Этот скрипт таков:

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

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

tab 1 of window id 2835

непосредственно перед тем, как он откроет новое окно и выполнит команду, которую я передаю. Есть идеи, почему это происходит? (Я пытался перенаправить stderr на /dev/null перед вызовом oascript, но это ничего не изменило.)


person barclay    schedule 10.11.2010    source источник


Ответы (1)


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
person Ned Deily    schedule 10.11.2010
comment
Работает как шарм. Исходный сценарий имел osascript 2›/dev/null ‹‹EOF, который перенаправлял stderr в /dev/null, поэтому я переместил его. Я не подумал попробовать перенаправить обычный вывод на /dev/null... Спасибо! - person barclay; 15.11.2010