2

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

#!/bin/sh
osascript <<END
tell app "Terminal" to do script "$1; logout"
END

所以我可以

$ spawn nano

在运行时打开一个新的终端窗口nano,当我关闭nano窗口时也会关闭。

但是,对于spawn带有参数的命令,例如java -jar foo.jar,我需要使用

$ spawn "java -jar foo.jar"

有没有办法更改脚本,以便在没有引号的情况下也能正常工作?例如,

$ spawn java -jar foo.jar

我已经尝试使用这个答案中的技巧来解决一个不涉及 AppleScript 的问题。但是,当我尝试使用spawn. 有没有办法逃避"$@"这个问题的或不同的实现?它不一定必须使用 AppleScript。

4

2 回答 2

0
#!/bin/sh
osascript <<END
tell app "Terminal" to do script "$@; logout"
END

似乎对我有用。

可以解决您的问题的另一个选项是将要执行的代码保存在临时文件夹中的文件中,然后使用终端打开它,如下所示:

#!/bin/sh
文件=$(mktemp $TMPDIR/spawnXXXXXX)
echo '#!/bin/sh' > "$file"
回声“$@”>>“$文件”
chmod +x "$文件"
打开 -a 终端“$file”

或者,如果您想在当前的终端程序(终端、iTerm 2 等)中打开它,您可以使用以下脚本:

#!/bin/sh
文件=$(mktemp $TMPDIR/spawnXXXXXX.command)
echo '#!/bin/sh' > "$file"
回声“$@”>>“$文件”
chmod +x "$文件"
打开“$文件”
于 2012-12-19T08:49:26.940 回答
0

您的脚本也没有正确转义。spawn '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

"$*"就像"$@",但所有论点都在一个词中。

于 2012-12-19T12:09:55.637 回答