新しいbashプロセスを作成すると、プロンプトはデフォルトで非常に単純なものになります。.bashrcなどを編集してこれを変更できることは知っていますが、bashコマンドでプロンプトを渡す方法はありますか?
ありがとう!
プロンプトは、PS1、PS2、PS3、およびPS4環境変数によって定義されます。したがって、たとえば、次の場合、プロンプトが「foo:」に設定された新しいbashが開始されます。
PS1="foo: " bash --norc
は、変数--norc
をオーバーライドする初期化ファイルの処理を抑制するために必要です。PS1
同じ問題があります。コマンドラインから一時的なbashを起動したいと思います。他のほとんどの環境変数は残りますが、から供給されたものは~/.bashrc
、オーバーライドするのが難しいです-特に私のように、あなたがすでに持っているもの(および内部のエイリアスなど)を実際に保持したい場合は、プロンプト ~/.bashrc
を除いてください。PS1
これが私のために働くものです(それ--init-file
はの同義語/エイリアスであることに注意してください--rcfile
):
bash --rcfile <(cat ~/.bashrc ; echo 'PS1="\[\033[0;33m\]\u@HELLO:\W\$\[\033[00m\] "')
基本的に、角かっこ/小括弧+括弧のイディオムは、プロセス置換<()
を開始します。bash
括弧内のstdoutにエコーされたものはすべて、一時ファイルになります/dev/fd/<n>
。だから私たちは最初にoutの内容を猫にし~/.bashrc
ます; 次に、最後にsetコマンドを追加するだけですPS1
(これは事実上オーバーライドされます)-これは最終的に/dev/fd/<n>
;になります。その後、新しいbash
に使用します。/dev/fd/<n>
rcfile
これはそれがどのように振る舞うかです:
user@pc:tmp$ TESTVAR="testing" bash --rcfile <(cat ~/.bashrc ; echo 'PS1="\[\033[0;33m\]\u@HELLO:\W\$\[\033[00m\] "')
user@HELLO:tmp$ test-alias-tab-completion ^C
user@HELLO:tmp$ echo $TESTVAR
testing
user@HELLO:tmp$ exit
exit
user@pc:tmp$
環境変数を設定してから、.bashrcのプロンプトでその環境変数を使用できます。