我正在從我的 bash 互動式 shell 運行一個 bash 腳本:
./shell.sh
我的困惑是,這個腳本會在新的 shell 實體中運行,還是在我當前 bash 實體的子 shell 中運行?我假設從 shell 呼叫的所有 shell 腳本都在新 shell 中運行,因此它們無法讀取呼叫 shell 的本地 shell 變數。此外,如果我在呼叫的腳本中放入“echo $BASH_SUBSHELL”,它會回傳一個值“0”,表明它不是子shell。但是根據一些文章,他們說從 shell 執行的 shell 腳本會呼叫子 shell。請幫忙。
uj5u.com熱心網友回復:
你是對的;當您使用 運行腳本時./shell.sh,它會在新的 shell 中運行,而不是當前 shell 的子 shell。
它確實在一個子行程中運行,它是一個 shell,所以說“subprocess shell=subshel??l,所以它必須是一個子shell!”是一個誘人且常見的錯誤。但這是不正確的。運行腳本的shell不會從父shell行程繼承shell變數(它將繼承環境變數,即exported變數,但任何子行程都是如此),它不會繼承shell模式(例如set -e)或其他shell狀態,并且它甚至不一定運行相同的 shell(如果您正在運行 bash 并且腳本有一個#!/bin/zshshebang,它將在 zsh 中運行)。因此,它在邏輯上是一個不同的 shell,恰好作為啟動它的 shell 的子行程運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416870.html
標籤:
上一篇:awk在輸出中列印不必要的新行
