SHLVL
執行 bash 命令時,將開啟一個新 shell。 $ SHLVL 環境變數儲存當前 shell 執行的 shell 級別數。
在新的終端視窗中,執行以下命令將根據正在使用的 Linux 發行版生成不同的結果。
echo $SHLVL
使用 Fedora 25 ,輸出為 3
。這表明,在開啟新 shell 時,初始 bash 命令會執行並執行任務。初始 bash 命令執行子程序(另一個 bash 命令),然後執行最終 bash 命令以開啟新 shell。當新 shell 開啟時,它作為 2 個其他 shell 程序的子程序執行,因此輸出為 3
。
在下面的示例中(假設使用者正在執行 Fedora 25),新 shell 中$ SHLVL 的輸出將設定為 3
。執行每個 bash 命令時,$ SHLVL 遞增 1。
~> $ echo $SHLVL
3
~> $ bash
~> $ echo $SHLVL
4
~> $ bash
~> $ echo $SHLVL
5
可以看到執行’bash’命令(或執行 bash 指令碼)會開啟一個新的 shell。相比之下,獲取指令碼會執行當前 shell 中的程式碼。
test1.sh
#!/usr/bin/env bash
echo "Hello from test1.sh. My shell level is $SHLVL"
source "test2.sh"
test2.sh
#!/usr/bin/env bash
echo "Hello from test2.sh. My shell level is $SHLVL"
run.sh
#!/usr/bin/env bash
echo "Hello from run.sh. My shell level is $SHLVL"
./test1.sh
執行:
chmod +x test1.sh && chmod +x run.sh
./run.sh
輸出:
Hello from run.sh. My shell level is 4
Hello from test1.sh. My shell level is 5
Hello from test2.sh. My shell level is 5