次のスクリプトがなぜ機能しないのか疑問に思います。
#!/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
、対話型シェルには影響しません。 および についても同様ですcd
。umask
これらは、Windows コマンド プロンプト (バッチ) の世界との違いです。
とはいえ、答えはありますし、あなたはすでにそれを知っています。スクリプト(10行のスクリプト)が と呼ばれている場合andy.sh
、 と入力することで必要な効果が得られるはずですsource andy.sh
。しかし、それは馬鹿げたやりすぎです(スクリプトを書く練習のためだけにやっているのでなければ)。
PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '
に入力しdrew.sh
てくださいsource drew.sh
。
ただし、alias
コマンドも調べてください。