我有一个带有一些逻辑的脚本来检查脚本是否正在交互模式下运行。 bashrc 和 bash_profile 都包含我导出的相同环境变量。我想在以交互方式或通过 cron 运行脚本时加载它们,因为它们用于脚本中的 if/then 语句和 case 语句:
if [[ $- == *i* ]]; then
source ~/.bash_profile
else
source ~/.bashrc
fi
然而,当我进行交互测试时,似乎这个条件不起作用,并且使用了“else”条件。这不会加载变量,因为 bashrc 中的逻辑检测到脚本正在交互运行。我对这些文件的行为方式是否存在严重误解?
答案1
这可能有用:
#!/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