web-dev-qa-db-ja.com

コマンドラインからiTermウィンドウでコマンドを実行するにはどうすればよいですか?

コマンドラインからiTermセッションを実行し、iTermウィンドウで実行するコマンドを渡すにはどうすればよいですか?

Xtermアナログは-e、つまり.

xterm -e sleep 10
12
Mark Harrison

私はAlexに同意し、AppleScriptを使用するのが最善の方法です。

これが私の「iterm」スクリプトで、実行可能ファイルとしてchmodし、パスにあるディレクトリにあります。私はそれをこのように使うことができます:

同封のシェル引数を引用する:

iterm "ls -l" 

複数のコマンドを渡して実行します。

iterm "calculatesomthing" "exit"

複数のコマンドを渡し、セミコロンで区切ります。

iterm "cd ~/mediaprojects; ./gitSyncAll; exit" 

自己完結型のbash/Applescript:

#!/bin/bash
read -r -d '' script <<'EOF'
on run argv
tell application "iTerm"
    activate
    set myterm to (make new terminal)
    tell myterm
        launch session "Default"
        tell the last session
            repeat with arg in argv
               say arg
               write text arg
            end repeat
        end tell
    end tell
end tell
end run
EOF
echo "$script" | osascript ``-'' $@

参考:「say」コマンドを削除することをお勧めします。これは、実行されている各cmdのリモート/可聴通知として使用します。一連のコマンドを複数のカスタムiTermプロファイル/シェルに渡します。シェルは大きなフラットスクリーンに並べて表示され、複雑なマルチDCAzure展開のステータスを表示します...

PS:スクリプトの最後の行の引用符が誰かのために適切にカット/貼り付けされなかったため、要点を追加しました@ https://Gist.github.com/sushihangover/7563e1707e98cdf2b285

7
SushiHangover

公式ドキュメント を見つけましたが、ApplescriptをSushiHangoverのようなosascriptで包むとは思っていませんでした-とても素敵です。彼の答えは私にはうまくいきませんでした。おそらく私が最新のベータ3.0バージョンを使用しているためです。それで、これがうまくいく(そして少し単純化する)ものです。

#!/bin/bash
osascript - "$@" <<EOF
on run argv
tell application "iTerm"
    activate
    set new_term to (create window with default profile)
    tell new_term
        tell the current session
            repeat with arg in argv
               write text arg
            end repeat
        end tell
    end tell
end tell
end run
EOF
12
SamG

これにはApplescriptを使用するのが最善です。 iTerm2にはいくつかの のスクリプトがあります。ドキュメントは少し見苦しいですが、それらの例はあなたにどこから始めるべきかについての考えを与えるはずです。

Applescript文字列をbashスクリプトでラップしてから、osascriptを使用して起動できます。

#~/bin/bash
tell application "iTerm"
    # etc...
    exec command "$@"

次に、スクリプトの実行は次のように簡単です。

./run-in-iterm.sh "echo 'hello world'"
4
Alex