タイトルが「ターミナル」タブに設定されている場合、スクリプトを実行する方法は?

タイトルが「ターミナル」タブに設定されている場合、スクリプトを実行する方法は?

日常業務では、私は多くの端末タブを保持します。だからこれを識別するためにタイトルを設定しました。

ターミナルタブ>タイトル設定

たとえば、IRC、API コードベース、API ログ、Server1 などがあります。

私がやりたいことは、タイトルに基づいてタブ内で特定のタスクを実行することです。例えば

  1. 「APIコードベース」を設定するときは、マイコードベースに移動して適切なPython仮想環境を有効にする必要があります。
  2. 「IRC」を設定すると実行する必要があります。irssi
  3. "Server1"を設定するときは、sshコマンドを実行してサーバーに接続する必要があります。

など。

これはどのように達成できますか?

答え1

私は少し違うようにします。タブのタイトルを手動で設定するのではなく、タイトルを設定し、目的のコマンドを実行する関数を作成します。この機能を追加してください(次から修正)。ここ)をあなたのもの~/.bashrc(bashを使用すると仮定):

function set-title() {
  if [[ -z "$ORIG" ]]; then
    ORIG=$PS1
  fi
  TITLE="\[\e]2;$@\a\]"

  ## Do different things depending on the string passed
  case "$@" in
        "API Codebase")
            echo cd ~/codebase
            echo python ...
            ;;
        "IRC")
            echo irssi
            ;;
        "Server1")
            echo ssh server1
            ;;
  esac
  PS1="${ORIG}${TITLE}"
}

答え2

私が知る限り端末の状態を確認できません。シェルのプロセスで。

ただし、可能であっても端末のタイトルに応じて動作を変更するとエラーが発生しやすくなります。スペルミスや同様のことを確認する簡単な方法はありません。また、スケーラビリティも良くありません。do_something_based_on_title機能を追加すると、コマンドが増え続けます。

set-title1つの巨大なスクリプトを使用する代わりに、各コマンドに実行時に独自の端末のタイトルを設定させます。以下のようにエイリアスを使用してこれを簡単に実行できます(自分.bashrcまたは類似の名前で入力)。

set_title() {
  echo -e "\e]0;$*\a"
}

alias apic='set_title "API Codebase"; command_for_api_codebase'
alias irc='set_title "IRC"; irssi'
alias server1='set_title "Server1"; ssh server1'

これらのコマンドに対してタブを完成させることができるため、タイトルの設定やプログラムの開始コードに関連する問題のリスクはなくなり、タイトルを設定するためにタブを右クリックする必要がなくなりました。目的のコマンドを実行するとタイトルが設定されます。

関連情報