2016-07-27 123 views
0
date 
ls 
exit 

在執行該腳本時,執行了命令datels但終端未關閉。爲什麼?退出沒有在腳本中執行

+1

因爲腳本運行在它自己的子shell中。你退出了這個子shell,而不是運行該腳本的父shell。 –

+1

嘗試'。 。/ abc',如果你真的想讓它退出你的終端... – twalberg

回答

1

該腳本將只退出它正在運行的shell。當您執行./abc時,父shell會分叉並運行一個子shell,其中運行./abc。 只是要位更加明顯有關子shell退出,請看下面的例子:

#!/bin/bash 

echo hi 
(exit) 
echo hello 

版畫既hihelloexit發生在子外殼中。所以,腳本不會退出,因此最後的echo hello被執行。

要查看自己也退出腳本,儘量

#!/bin/bash 

echo hi 
exit 
echo hello 

運行此腳本的輸出將只是「嗨」;退出命令在達到echo hello之前終止腳本(但不終止運行在終端中的shell)。

+0

有幫助,但是請注意,(非源代碼)腳本不是_subshel​​l_,而是_a子進程碰巧運行另一個shell instance_(具體的shell /可執行文件由腳本的shebang行確定或不存在,並且可能是不同的shell)。 這個區別很重要,因爲一個真正的子shell(如你的'(exit)'例子)有一個當前shell環境的副本(繼承所有變量,別名,函數......),這不是shell的真實情況用於運行腳本的實例。 – mklement0