回答:
tell application "Terminal"
do script " "
activate
end tell
奇妙に思えますが、Terminalが着信 "do script"コマンドを処理する方法の奇妙さを利用しています。各ウィンドウに新しいウィンドウが作成されます。必要に応じて、実際に有用なものに置き換えることができます。新しいウィンドウを開いた直後に、必要なものを実行します。
私はそれをする3つの異なる方法を考えることができます(最初の2つはどこかから盗まれましたが、どこで忘れましたか)。毎回新しいウィンドウを開きたいので、それが最短だったので、私はapplescriptからシェルスクリプトを呼び出す3番目のものを使用します。
少なくとも10.10以降にOS Xに組み込まれたスクリプトとは異なり、これらはすべて、ファインダウィンドウの現在の作業ディレクトリであるディレクトリでターミナルを開きます(つまり、開くためにフォルダを選択する必要はありません)。
Finder>ターミナル> Finderサークルを完了するためのbash関数もいくつか含まれています。
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if (exists window 1) and not busy of window 1 then
do script "cd " & quoted form of myDir in window 1
else
do script "cd " & quoted form of myDir
end if
activate
end tell
tell application "Finder" to set myDir to POSIX path of (insertion location as alias)
tell application "Terminal"
if not (exists window 1) then reopen
activate
if busy of window 1 then
tell application "System Events" to keystroke "t" using command down
end if
do script "cd " & quoted form of myDir in window 1
end tell
tell application "Finder"
set myDir to POSIX path of (insertion location as alias)
do shell script "open -a \"Terminal\" " & quoted form of myDir
end tell
このエイリアスを.bash_profileに追加します。
alias f='open -a Finder ./'
この関数を.bash_profileに追加します。
cdf() {
target=`osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)'`
if [ "$target" != "" ]; then
cd "$target"; pwd
else
echo 'No Finder window found' >&2
fi
}
上記の回答は、ターミナルがすでに実行されている場合にのみ機能します。理由の一つ-それ以外の場合は、一度に2つのターミナルウィンドウを開き、do script
との理由1 activate
。
単純なif ... elseでこれを防ぐことができます:
if application "Terminal" is running then
tell application "Terminal"
do script ""
activate
end tell
else
tell application "Terminal"
activate
end tell
end if
ボーナス:
コマンドを直接実行したい場合は、キーストロークを介してこれを行うことができます(あまりエレガントではありません-知っています!しかし動作します)
[...]
else
tell application "Terminal"
activate
tell application "System Events" to keystroke "ls -la"
tell application "System Events" to key code 36
end tell
end if