はい、Apple Script。
現在のデスクトップスペースで新しいターミナルウィンドウを開く必要があります。ターミナルが実行されている別のスペースに移動してから、別のターミナルウィンドウを開かないでください。
もちろん、ターミナルが実行されていない場合は、新しいターミナルプロセスを開始する必要があります。
tell application "Terminal"
do script " "
activate
end tell
奇妙に思えますが、ターミナルが着信する「doscript」コマンドを処理する方法の奇妙さを利用しています。それぞれに新しいウィンドウを作成します。必要に応じて、実際にそれを便利なものに置き換えることができます。新しいウィンドウを開いた直後に、好きなように実行します。
Doスクリプト ""の間にテキストがない場合、ターミナルで追加のコマンドプロンプトは表示されません。
tell application "Terminal"
do script ""
activate
end tell
私はそれを行うための3つの異なる方法を考えることができます(最初の2つはどこかから盗まれましたが、どこかを忘れています)。毎回新しいウィンドウを開きたいので、それが最短だったので、applescriptからシェルスクリプトを呼び出す3番目のものを使用します。
10.10以降にOS Xに組み込まれたスクリプトとは異なり、これらはすべて、Finderウィンドウの現在の作業ディレクトリであるターミナルでターミナルを開きます(つまり、開くためにフォルダを選択する必要はありません)。
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つのターミナルウィンドウを同時に開きます。1つはdo script
のため、もう1つはactivate
のためです。
簡単な場合はこれを防ぐことができます... 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