0

端末で 2 つのタブを使用するスクリプトを作成しようとしています。各タブに別のログファイルを追加したい。スクリプトは /scripts ディレクトリにあり、ログは親ディレクトリにあります。

最初のタブとテールは正常に機能します。2 つ目は、ホーム ディレクトリで開くため、そうではありません。

スクリプトは次のとおりです。

CURRENT_DIR=$(pwd);

# First tail
osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' -e 'tell application "Terminal" to do script "cd ..;tail -f my.log" in selected tab of the front window';

# Second tail
cd $CURRENT_DIR;
osascript -e 'tell application "Terminal" to activate' -e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' -e 'tell application "Terminal" to do script "cd ..;tail -f mySecond.log" in selected tab of the front window';

奇妙な理由でホームディレクトリのタブを開くため、2番目のテールは機能しません。
通常cmd + t、新しい端末タブを実行すると、同じディレクトリで開きます。

私が間違っていることについてのアイデアはありますか?

4

2 に答える 2

2

私はその行動に頼りません。「同じディレクトリで開く」トリックは、シェルがターミナル ウィンドウのタイトル バーを変更することに依存しています。これは、(a) 予期したときに常に発生するとは限らず、(b) シェル以外のプロセスが実行されると中断します。それ自体がタイトル バーの変更を決定します。

どちらの場合も、注意を怠ってコマンドにフルパスを渡し、on runメカニズムを使用してこのパスをコマンドラインパラメーターとして渡します(パスが間違っている場合に引用符を正しく取得しようとするよりも簡単で安全です)。スペースを含む):

osascript -e 'on run argv' \
          -e '  tell application "Terminal" to do script "cd " & quoted form of item 1 of argv & " ; tail -f ../mySecond.log" in selected tab of the front window' \
          -e 'end run' \
          "$CURRENT_DIR"

これは、そのタブの「現在の」ディレクトリが何であるかを気にしないことを意味し、tail常に正しいファイルが表示されます。

于 2013-10-14T17:43:12.227 に答える
0

私は次のようにしてこれを行いました:

pwd=`pwd`
osascript -e "tell application \"Terminal\"" \
    -e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
    -e "do script \"cd $pwd; tail -f my.log \" in front window" \
    -e "end tell"
    > /dev/null;

osascript -e "tell application \"Terminal\"" \
    -e "tell application \"System Events\" to keystroke \"t\" using {command down}" \
    -e "do script \"cd $pwd; tail -f mySecond.log\" in front window" \
    -e "end tell"
    > /dev/null;
于 2013-10-14T17:57:43.383 に答える