bash スクリプトの修正 - 一時ファイルを介してプロンプトの色の変更を呼び出す

bash スクリプトの修正 - 一時ファイルを介してプロンプトの色の変更を呼び出す

次のスクリプトがなぜ機能しないのか疑問に思います。

#!/bin/bash
read -p 'First lets write PROMPT.SH'
echo '#!/bin/bash'>prompt.sh
echo "export PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '">>prompt.sh
read -p "Change Title and Prompt"
source prompt.sh
echo texttexttext
read -p "Now lets tidy up PROMPT.SH"
rm ./prompt.sh
read -p "That was the program"

私がやろうとしているのは、通常であれば、ウィンドウのタイトル、プロンプト、テキストの色を変更することです。

PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '

通常の bash セッション中は発生しますが、スクリプトに追加してスクリプトを実行すると発生しません。

答え1

PS1対話型プロンプトにのみ表示されます。 に表示されるプロンプトとは関係ありませんread -p。入力を読み込んでいる場合でも、bashスクリプトの実行は考慮されません。相互の作用

答え2

何をしようとしているのかよく分かりませんが、PS1スクリプトから対話型シェルの設定をしているのだと思います。そのように述べると、それはできません。*nix および Unix 系システムでは、プロセスの特性/プロパティは親から子に渡されますが、その逆は渡されません。たとえば、 を をPATH含めるように設定し/foo、 を実行しようとするスクリプトを実行するとbar、 — が見つかります/foo/bar。ただし、スクリプトで を変更してもPATH、対話型シェルには影響しません。 および についても同様ですcdumaskこれらは、Windows コマンド プロンプト (バッチ) の世界との違いです。

とはいえ、答えはありますし、あなたはすでにそれを知っています。スクリプト(10行のスクリプト)が と呼ばれている場合andy.sh、 と入力することで必要な効果が得られるはずですsource andy.sh。しかし、それは馬鹿げたやりすぎです(スクリプトを書く練習のためだけにやっているのでなければ)。

PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '

に入力しdrew.shてくださいsource drew.sh

ただし、aliasコマンドも調べてください。

関連情報