2016-06-07 23 views
2

我想編寫一個很小的shell腳本,它會在命令提示符變得太長時縮短它。在bash中設置PS1變量可以正常工作。當我在腳本中直接嘗試相同的命令並運行它時,沒有任何反應。通過自己的腳本臨時更改bash提示

#!/bin/bash 

PS1='\u:\W\$ ' 

我試過eval "PS1='\u:\W\$ '"export PS1='\u:\W\$ 'exec PS1='\u:\W\$ '沒有任何結果。

我如何才能達到與bash中的直接輸入相同的結果?

預先感謝您

+0

順便說一句,你可能會考慮使用shell函數而不是腳本。 –

+0

這意味着添加一個函數〜/ .profile或〜/ bashrc? – mremergo

+0

'〜/ .bashrc',而不是'〜/ .profile' - 每個交互式shell都會執行bashrc,該配置文件僅適用於登錄shell(除了某些操作系統,通過擦除來嘗試「更容易」不同之處在於它們之間存在差異),而常規函數不會被子進程繼承,所以(與環境變量不同,它適用於'〜/ .profile')不會得到他們到處都需要它們,除非它們在'〜/ .bashrc'中。 –

回答

1

一般來說,在UNIX,這個過程只能改變變量本身和它的孩子 - 而不是它的父(「母公司」是調用它的過程)。

您需要腳本,不執行它,因爲它能夠影響交互式shell的變量。這將執行當前shell中腳本內的所有命令,而不是作爲子進程啓動的新shell(其變量值在退出時丟棄)。

# in bash 
source yourscript 

# or in POSIX sh 
. yourscript # mind the space! 

在這個用法中,shebang什麼都不做;同樣,+x權限也不需要。還有一種典型的方式,即將腳本命名爲源代碼,而不是使用擴展映射到它們打算使用的shell(yourscript.bash用於bash,yourscript.sh用於可由任何POSIX shell提供的腳本),而腳本用於被執行而不是源代碼應該沒有擴展。