新しい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のプロンプトでその環境変数を使用できます。