[英]Bash interactive and non-interactive shell behaviour
我很難使用交互式和非交互式shell。 我不明白哪個是哪個。
例如,我已經讀過非交互式shell通常在啟動時檢查BASH_ENV
變量並執行它指向的任何內容。
所以,我所做的是將BASH_ENV
設置為指向一些只回顯OK的腳本。 然后我在終端輸入bash
,這個腳本回顯OK。 但為什么? 我不是通過在終端中鍵入bash來調用另一個INTERACTIVE shell,而不是相反嗎? 為什么執行bash_env? 我在linux薄荷瑪雅。
您唯一可以確定的是bash
的聯機幫助頁(參見INVOCATION
)中顯示的內容 - 詳細列出了每個實例中運行的啟動文件。
但是,沒有什么能阻止(例如)其中一個運行其他文件的啟動文件通常無法運行。
舉例來說,如果.bash_profile
有以下行:
. ~/.profile
它還會運行.profile
腳本。
實際上,聯機幫助頁指出:
例如,當以非交互方式啟動bash以運行shell腳本時,它會在環境中查找變量BASH_ENV,如果它出現在那里則展開其值,並使用擴展值作為文件名來讀取和執行。 Bash的行為就像執行了以下命令一樣:
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
因此,如果您將啟動腳本中的確切行放在~/.bash_profile
等交互式shell中,您還將BASH_ENV
指向的文件。
你最好的選擇是檢查INVOCATION部分以找出將運行哪些文件,然后通過它們進行跟蹤(在腳本頂部使用set -x
類的東西)來查看從哪里調用的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.