为非交互式 shell 设置环境变量

Tru*_* Vo 6 linux bash shell

我正在尝试为非交互式非登录 shell 设置环境变量。我知道 bash 在执行命令之前读取 ~/.bashrc 的内容。在脚本的开头有一个部分:

*# If not running interactively, don't do anything

case $- in
*i*) ;;
  *) return;;
esac*
Run Code Online (Sandbox Code Playgroud)

所以我想如果我在它上面添加一些东西,无论shell是否交互都会生效:

export VAR=something

# If not running interactively, don't do anything

case $- in
*i*) ;;
  *) return;;
esac
Run Code Online (Sandbox Code Playgroud)

但是它不起作用:(。我想避免使用 $BASH_ENV 因为它弄乱了我的 xkb 设置。我重新映射了 /usr/share/X11/xkb/symbols/pc 中的一些键。如果我设置了 $BASH_ENV,它只会加载默认的键盘映射。

Tru*_* Vo 8

Ubuntu 解决方案:在 中设置变量/etc/environment,它适用于所有用户和所有类型的 shell。

  • 那么不可能为非交互式 shell 设置用户特定的环境变量吗? (2认同)