読み取り専用PROMPT_COMMANDで書き込みコマンドを使用するには?

読み取り専用PROMPT_COMMANDで書き込みコマンドを使用するには?

私は時々私が制御せずにPROMPT_COMMANDどこかにホストにログインしますreadonly。どのような方法がありますか?この問題を解決するには、次の手順を実行します。history注文するそれでも、例えばPS1?を使ってみました。すべてのプロンプトが印刷されますがPS1='$(history -a; history -c; history -r; echo finished)'動作finishedしないようです。

  1. 同じホストで2つの端末AとBを開きます。
  2. 端末Aでコマンドを実行してくださいa
  3. ターミナルBでコマンドを実行してくださいb
  4. B端子を2回押します

ホストがある場所にはPROMPT_COMMAND='history -a; history -c; history -r;'端末Bが表示されますaPS1それで始まるホストでは、$(history -a; history -c; history -r; echo finished)両方の端末を開く前に実行されるコマンドが表示されます。明らかな理由はinコマンドはPS1サブシェルで実行されます。

別のオプションは、グローバルRCファイルを完全にバイパスすることです。

bash --rcfile ~/.bashrc

ただし、標準値の使用をバイパスPROMPT_COMMANDすることは可能です。システム管理者が承認しない政策上の理由で。

ベストアンサー1

シグナルハンドラ内で書き込みコマンドを実行できるため、サブシェルは不要です。その後、PS1適切な信号を送信します。

trap 'history -a; history -c; history -r;' USR1
export PS1='$(kill -USR1 $$)'"$PS1"

おすすめ記事