簡體   English   中英

Bash交互式和非交互式shell行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM