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?
沒有。子進程不能改變父進程的環境。 –