複数の端末ウィンドウが開いています。変更したばかりで、開いているすべての端末で実行~/.bashrc
したいと思います。source ~/.bashrc
私が見るには
source ~/.bashrc | tee /dev/pts/{0..12}
、~/.bashrc
すべての端末で実行する必要があります。clear
の終わりにを追加したのでそうです~/.bashrc
。
しかし、私が具体的にテストしているのは
PROMPT_COMMAND="history -a; history -c; history -r; ${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}"
すべての端末の単一情報ソースを効果的に生成し、開いているすべての端末で変更します。
今、これが執筆に関連しているのか/dev/pts/{0..12}
、それがどのように機能するのかについてはわかりませんhistory
。 、git log
および実行中の開いている端末の1つを見て、echo $PROMPT_COMMAND
次のようにします。いいえ予期した修正が適用されて~/.bashrc
いることを確認してください。コマンドが欠落しているため、実行中の別の端末で出力を表示できませんhistory
。後で実際に修正したことを確認したいと思います。git log
tail -f ~/.bash_history
PROMPT_COMMAND
source ~/.bashrc
echo $PROMPT_COMMAND | tee /dev/pts/{0..12}
ただし、各端末に値が何であるかを尋ねると、次のようなPROMPT_COMMAND
結果が得られます。
history -a; history -c; history -r; pre_prompt_command; echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/\~}\007"
これには、history -a; history -c; history -r;
私が追加した変更が含まれます~/.bashrc
。
今私は混乱しました。私は何が間違っていましたか?それとも私が間違って理解しているのでしょうか?修正されましたかPROMPT_COMMAND
、ダメですか?それともbash / linuxの動作方法の結果ですか?私はこれがバグではなくユーザーエラーであると確信しています。
答え1
source ~/.bashrc
現在のシェルソースを作成します~/.bashrc
。出力を次にリダイレクトするとtee
(あなたの場合は複数のファイルに転送されます)、/dev/pts/…
リダイレクトされます。出力.bashrc
内容ではないのコマンドです.bashrc
。
ただし、これはcat ~/.bashrc | tee /dev/pts/{0..12}
コンテンツを別のシェルに送信するのではなく、他のシェルのコマンドラインをecho 'source ~/.bashrc' | tee /dev/pts/{0..12}
挿入することでもありません。source ~/.bashrc
バラより文字列を tty に入れてコマンドを設定します。、特にこの回答:
端末は、入力デバイス(キーボードなど)とディスプレイデバイス(モニタなど)の2つの役割を果たします。端末から読むと、入力デバイスから出てくる内容が得られます。端末に書き込むと、データが表示装置に表示されます。
バイトを送信すると、/dev/pts/…
ディスプレイデバイスでのみ応答が得られ、それを使用するシェル(または他のもの)では応答を取得できません。ディスプレイデバイスは通常、ユーザーが送信した内容を表示/印刷することで反応します。ただし、一部のバイトシーケンスは特別です。
clear
それは偶然作られる。出力いくつかの特殊なバイトシーケンスが原因で出力をリダイレクトして分岐すると、他の端末が画面を消去して反応します。通常、他の端末はclear
順序がclear
次のように変わるため、「外部」に反応する場合もあれば、反応しない場合もあります$TERM
。clear
はい)、したがって実行中の端末に合わせて調整されましたclear
。
同様に、echo $PROMPT_COMMAND | tee /dev/pts/{0..12}
他のシェルでは何もしません。現在、シェルが拡張されています$PROMPT_COMMAND
(二重引用符で囲む必要があります。)、echo
結果を複数の端末にtee
送信します。tee
各端末印刷指定された変数値現在のシェル;他のシェルは含まれません。
一般的に言えば、Linuxでは文字列を入力したかのように挿入する簡単な(たとえば、またはなどの単純な>/dev/pts/…
)方法はありません。tee /dev/pts/…
プログラマは次のものを使用できます。チオクティ。ターミナルマルチプレクサとターミナルエミュレータは、自分がエミュレートするターミナルにキーストロークを送信する方法を提供できます(例:send-keys
ティモックス)。それにもかかわらず、命令を注入することは一般的にエレガントな方法ではありません。これは、「シェル」にbash以外のものがあるかもしれません(bashかどうかにかかわらず)、入力を消費できる他のものを実行するのに忙しいかもしれません。渡すこともできます。不要な事項に対応するには、次の手順を実行します。
また、source ~/.bashrc
Enterインタラクティブなbashのコマンドラインに直接入力しても「誤動作」する可能性があります。~/.bashrc
きれいなシェルに自動的に一度インポートすることを意味します。古いシェルから新しいバージョンを取得することは、新しいシェルの起動とは異なります。