Bash
從 bashrc 或 bash_profile 載入變數不起作用
我有一個帶有一些邏輯的腳本來檢查腳本是否在互動模式下執行。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