2013-10-10 125 views
0

我的理解是,當我使用類似$ ./myscript.sh的語法在BASH外殼中執行腳本時,啓動子外殼並在該外殼中運行代碼,同時打印STDOUT和STDERR輸出在我的外殼上,STDIN從我的外殼中取出。這是腳本如何互動。Bash:在調用外殼的上下文中執行腳本

文件「myscript」的第一行是#!/bin/bash,這表示解釋器用於在腳本文件中執行語法。

如果我使用語法source myscript.sh,腳本中的代碼被「拉」到我當前的環境中並在那裏執行,而不是在子shell中執行。我不能在我與$ ./myscript.sh調用腳本運行下面的代碼,並影響我當前的shell:如果我把#!/bin/bash和使用source這個腳本改變了我的命令提示符

#!/bin/bash 

PS1='` 
    if [ $? -eq 0 ]; 
    then echo -n "\[\033[00;35m\]\u\[\033[01;32m\]@\[\033[00;35m\]\h\[\033[00;32m\](\[\033[01;35m\]\W\[\033[01;32m\])\[\033[00;32m\]\$"; 
    else echo -n "\[\033[00;35m\]\u\[\033[01;31m\]@\[\033[00;35m\]\h\[\033[01;31m\](\[\033[35m\]\W\[\033[31m\])\[\033[00;31m\]\$"; 
    fi`\[\033[0m\]' 

。它可以以這樣的方式安排在腳本中,我可以用$ ./myscript.sh來調用它,它會改變我當前的shell,而不是子shell?

+3

沒有。子進程不能改變父進程的環境。 –

回答

4

一旦您調用了一個沒有source的腳本,它將在子shell中運行,並且無法更改父shell的環境。

您可以使用shebang行來源腳本。採購時簡單忽略它。