bar*_*lay 4 macos bash terminal osascript
我喜欢创建我自己的函数来打开一个新终端的概念,所以Craig Walker在上面引用的问题中链接的脚本符合我的需求.由Mark Liyanage编写的剧本可在此处找到.
那个脚本是这样的:
#!/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
Run Code Online (Sandbox Code Playgroud)
我对链接网站上的脚本进行了一处更改; 我注释掉输出"$ COMMAND $ EXIT"的行以消除一些冗长.但是,当我运行脚本时,我仍然得到这个输出
tab 1 of window id 2835
Run Code Online (Sandbox Code Playgroud)
就在它打开新窗口并执行我传入的命令之前.任何想法为什么会发生这种情况?(我尝试在调用oascript之前将stderr的重定向移动到/ dev/null,但这没有任何区别.)
tab 1 of window 2835
是do script
命令返回的对象的AppleScript表示形式:它是tab
为执行命令而创建的实例.osascript
将脚本执行的结果返回给标准输出.由于return
AppleScript脚本中没有显式,因此整个脚本的返回值是最后执行的语句(通常是do script
命令)的结果.最简单的两个修复方法是重定向osascript的stdout(最好不要在发生错误时重定向stderr):
osascript >/dev/null <<EOF
Run Code Online (Sandbox Code Playgroud)
或者return
在AppleScript中插入一个显式的(没有值).
tell application "Terminal"
activate
do script with command "$COMMAND $EXIT"
end tell
return
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4257 次 |
最近记录: |