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を扱っていない質問へのトリックを使ってみました。ただし、を使用しようとすると、常にTerminal.appがクラッシュしていspawnました。"$@"この問題のまたは別の実装を回避する方法はありますか?必ずしもAppleScriptを使用する必要はありません。

4

2 に答える 2

0

スクリプトも適切にエスケープされていません。spawn 'echo "a"'二重引用符のため、エラーが発生します。

run ハンドラーを使用して、引数を 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

"$*"は似"$@"ていますが、すべての引数が 1 つの単語に含まれています。

于 2012-12-19T12:09:55.637 に答える
0
#!/bin/sh
osascript <<END
tell app "Terminal" to do script "$@; logout"
END

私にはうまくいくようです。

問題を解決する別のオプションは、実行するコードを一時フォルダーのファイルに保存し、次のようにターミナルで開くことです。

#!/ビン/sh
file=$(mktemp $TMPDIR/spawnXXXXXX)
echo '#!/bin/sh' > "$file"
echo "$@" >> "$ファイル"
chmod +x "$ファイル"
open -a ターミナル「$file」

または、現在のターミナル プログラム (Terminal、iTerm 2 など) で開きたい場合は、次のスクリプトを使用できます。

#!/ビン/sh
file=$(mktemp $TMPDIR/spawnXXXXXX.command)
echo '#!/bin/sh' > "$file"
echo "$@" >> "$ファイル"
chmod +x "$ファイル"
「$file」を開く
于 2012-12-19T08:49:26.940 に答える