
はい、私は Apple Script に関してひどい初心者体験をしています。
現在のデスクトップ スペースで新しいターミナル ウィンドウを開く必要があります。ターミナルが実行中の別のスペースに移動して、別のターミナル ウィンドウを開く必要はありません。
もちろん、ターミナルが実行されていない場合は、新しいターミナル プロセスを開始する必要があります。
答え1
tell application "Terminal"
do script " "
activate
end tell
奇妙に思えるかもしれませんが、これはターミナルが受信した「スクリプト実行」コマンドを処理する方法の奇妙さを利用しており、コマンドごとに新しいウィンドウを作成します。必要に応じて、実際にこれを便利なものに置き換えることができます。新しいウィンドウを開いた直後に、必要な操作を実行します。
答え2
do スクリプト " " の間にテキストがない場合、ターミナルに追加のコマンド プロンプトは表示されません。
tell application "Terminal"
do script ""
activate
end tell
答え3
これを行うには 3 つの方法が考えられます (最初の 2 つはどこか別の場所から盗んだものですが、どこから盗んだのかは忘れました)。私は、毎回新しいウィンドウを開きたいので、また最も短い時間だったため、AppleScript からシェル スクリプトを呼び出す 3 番目の方法を使用します。
少なくとも 10.10 以降の OS X に組み込まれているスクリプトとは異なり、これらはすべて、Finder ウィンドウの現在の作業ディレクトリにあるディレクトリでターミナルを開きます (つまり、開くためにフォルダーを選択する必要はありません)。
また、Finder > ターミナル > Finder サークルを完成させるためのいくつかの bash 関数も含まれています。
1. 既存のタブを再利用するか、新しいターミナル ウィンドウを作成します。
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
2. 既存のタブを再利用するか、新しいターミナル タブを作成します。
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
3. AppleScriptから呼び出されたシェルスクリプトを介して毎回新しいウィンドウを生成する
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
4. (ボーナス) ターミナルの現在の作業ディレクトリの新しいファインダーウィンドウを開くための Bash エイリアス
このエイリアスを .bash_profile に追加します。
alias f='open -a Finder ./'
5. (ボーナス) ターミナルウィンドウのディレクトリを、フロントの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
}
答え4
上記の回答は、ターミナルがすでに実行されている場合にのみ機能します。そうでない場合は、ターミナル ウィンドウが 2 つ同時に開きます。1 つは のため、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