![修改 bash 腳本 - 透過臨時檔案呼叫提示顏色的更改](https://rvso.com/image/1337841/%E4%BF%AE%E6%94%B9%20bash%20%E8%85%B3%E6%9C%AC%20-%20%E9%80%8F%E9%81%8E%E8%87%A8%E6%99%82%E6%AA%94%E6%A1%88%E5%91%BC%E5%8F%AB%E6%8F%90%E7%A4%BA%E9%A1%8F%E8%89%B2%E7%9A%84%E6%9B%B4%E6%94%B9.png)
我想知道為什麼以下腳本不起作用:
#!/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
命令。