Macos 通行证$@&引用;写

Macos 通行证$@&引用;写,macos,applescript,sh,Macos,Applescript,Sh,因此,我将以下脚本保存为usr/local/bin/spawn,它在新的终端窗口中打开一个进程,然后关闭该窗口: #!/bin/sh osascript <<END tell app "Terminal" to do script "$1; logout" END 在运行nano的情况下打开新的终端窗口,当我关闭nano时,窗口也会关闭 但是,要生成带有参数的命令,比如java-jarfoo.jar,我需要使用 $ spawn "java -jar foo.jar" 有没有办法更

因此,我将以下脚本保存为
usr/local/bin/spawn
,它在新的终端窗口中打开一个进程,然后关闭该窗口:

#!/bin/sh
osascript <<END
tell app "Terminal" to do script "$1; logout"
END
在运行
nano
的情况下打开新的终端窗口,当我关闭
nano
时,窗口也会关闭

但是,要生成带有参数的命令,比如java-jarfoo.jar,我需要使用

$ spawn "java -jar foo.jar"
有没有办法更改脚本,使其在没有引号的情况下也能正常工作?比如说,

$ spawn java -jar foo.jar
我试过使用从到的技巧来回答一个不涉及AppleScript的问题。然而,当我尝试使用
spawn
时,这总是导致Terminal.app崩溃。是否有办法避开
“$@”
或针对此问题的其他实现?它不一定要使用AppleScript。

#/垃圾箱/垃圾箱
#!/bin/sh
osascript <<END
tell app "Terminal" to do script "$@; logout"
END
osascript>“$file” chmod+x“$file” 打开-终端“$file” 或者,如果您想在当前终端程序(终端、iTerm 2等)中打开它,您可以使用以下脚本:

#!/bin/sh file=$(mktemp $TMPDIR/spawnXXXXXX.command) echo '#!/bin/sh' > "$file" echo "$@" >> "$file" chmod +x "$file" open "$file" #!/垃圾箱/垃圾箱 文件=$(mktemp$TMPDIR/spawnXXXXXX.command) 回音/bin/sh'>“$file” 回显“$@”>>“$文件” chmod+x“$file” 打开“$file”
您的脚本也没有正确转义<代码>生成“echo”a“
将由于双引号而导致错误

您可以使用运行处理程序将参数传递给osascript:

#!/bin/bash

osascript - "$*" <<END
on run args
tell app "Terminal"
do script item 1 of args
do script "logout" in window 1
end
end
END
#/bin/bash

osascript-“$*”有效,但不能解决Lauri Ranta提出的逃逸问题。@Fenhl我不知道如何使用applescript来解决这个问题,但我想我解决了你的问题。这种方法在生成新的终端窗口时会立即杀死原来的终端窗口。@Fenhl你说kill是什么意思?注销命令应在打开的窗口中运行。如果确实要关闭新窗口,请将窗口1中的
执行脚本“注销”替换为
关闭窗口1
。我的意思是关闭,对不起。我对AppleScript了解不多,但它看起来像是
window 1
指的是我调用
spawn
脚本的窗口。 #!/bin/sh file=$(mktemp $TMPDIR/spawnXXXXXX.command) echo '#!/bin/sh' > "$file" echo "$@" >> "$file" chmod +x "$file" open "$file"
#!/bin/bash

osascript - "$*" <<END
on run args
tell app "Terminal"
do script item 1 of args
do script "logout" in window 1
end
end
END