Bash

從 bashrc 或 bash_profile 載入變數不起作用

  • June 2, 2022

我有一個帶有一些邏輯的腳本來檢查腳本是否在互動模式下執行。bashrc 和 bash_profile 都包含我導出的相同環境變數。我想在以互動方式或通過 cron 執行腳本時載入這些,因為它們用於腳本後面的 if/then 語句和 case 語句:

if [[ $- == *i* ]]; then
  source ~/.bash_profile
else
  source ~/.bashrc
fi

但是,當我以互動方式進行測試時,似乎此條件不起作用並且使用了“其他”條件。這不會載入變數,因為 bashrc 中的邏輯檢測到腳本正在互動執行。我是否對這些文件的行為方式有嚴重誤解?

這可能有用:

#!/bin/bash
if [[ $- == *i* ]]; then
#   source ~/.bash_profile
  echo 'this script is interactive; $- is equal to *i*'
else
#   source ~/.bashrc
echo 'this script is not interactive; $- is NOT equal to *i*'
fi

輸出將始終是else條件,因為預設情況下腳本在子 shell 中執行。shebang您可以通過稍微更改以互動方式執行腳本:

從: #!/bin/bash

至: #!/bin/bash -i

引用自:https://unix.stackexchange.com/questions/704654