ターミナルでのシェルコマンドの実行を支援する AppleScript ライブラリです。ターミナルでシェル コマンドは「do script」コマンドで簡単に実行できますが、次のような、より複雑な処理を行いたいときにこのライブラリは役に立ちます。
TerminalCommander の基本的な使い方は、次のような手順になります。
TerminalCommander は、以下のシェルスクリプトを~./bash_profile もしくは ~/.zprofile に追加すると、シェルの Working Directory でターミナルを見つけられるようになります。
このシェルスクリプトは、コマンドプロンプトが更新されるたびに、~/.cwd-tty ファイルにtty デバイス名とworking directory の対応を記録します。
TerminalCommander のバンドル内の納められています。以下のように、source コマンドで実行すると良いでしょう。
source '~/Library/Scripts Libraries/TerminalComannder.scpt/Contents/Resources/cwd-tty.sh'
# cwd-tty.sh # # script to mainten a correspondence table between ttyname and # working directory. # Insert following line into .zprofile or .bash_profile. # # source path-to-dir/cwd-tty.sh # # 2.0 -- 2020-01-09 # * Added support of zsh if [[ $TERM_PROGRAM = 'Apple_Terminal' ]] && [[ -z $INSIDE_EMACS ]]; then save_cwd() { local ttyname=`tty`; if [[ ! -e ~/.cwd-tty ]]; then echo "$ttyname $PWD" > ~/.cwd-tty return fi local out=() local matched=0 local LINE while read LINE ; do newline="${ttyname} ${PWD}" case $LINE in ${newline}) return;; ${ttyname}" "*) out+=("$newline") matched=1;; *) out+=("$LINE");; esac done < ~/.cwd-tty if [[ $matched -eq 0 ]]; then out+=("$ttyname $PWD") fi IFS=$'\n' echo "${out[*]}" > ~/.cwd-tty unset IFS } if [[ -n $ZSH_VERSION ]]; then autoload add-zsh-hook add-zsh-hook precmd save_cwd else PROMPT_COMMAND="save_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}" fi fi
次のように、set_working_directory で目的の directory を設定すると、~/.cwd-tty ファイルを読み込んで、目的のディレクトリの tty デバイスを調べ、tty デバイスからターミナルを探します。
ターミナルが見つからない場合には、新しいターミナルを開きますが、do コマンドには set_working_directory で設定された場所に cd する動作は含まれていません。確実に指定した場所でコマンドを実行するには、set_execution_string で cd コマンドを設定してください。execution string は新しいターミナルで一番最初に実行されるコマンドです。
次のサンプルでは、3回シェルコマンドを実行しています。3回目のシェルコマンドの実行の際には1回目のターミナルと同じ working directory を指定しています。そのため、3回目のシェル コマンドは1回目のターミナルでコマンドが実行されることに注目してください。