修改 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透過腳本為你的互動式 shell 設定的。就這樣說,你做不到。在 *nix 和類別 Unix 系統中,進程特徵/屬性從父級傳遞到子級,但絕不會相反。例如,如果您將您設定PATH為 include /foo,然後執行嘗試執行的腳本bar,它會找到/foo/bar— 但如果您變更PATH腳本,它不會影響您的互動式 shell。對於cd和 也是如此umask。這些是與 Windows 命令提示字元(批次)世界的差異。

也就是說,有一個答案,而且你已經知道了。如果您的腳本(10 行腳本)被稱為andy.sh,那麼您應該能夠透過輸入 來獲得您想要的效果source andy.sh。但這是愚蠢的矯枉過正(除非你只是為了劇本寫作練習而這樣做);只是放

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

進入drew.sh並輸入source drew.sh.

而且還要研究alias命令。

相關內容