我正在制作一个 .sh 文件,非高级用户可以通过右键单击 -> 作为程序运行来运行它。它应该打开一个终端窗口并运行一个docker run
使用一些环境变量的命令。
我的问题是,我无法告诉终端加载这些环境变量。
我已经export VARIABLE=value
尝试.bashrc
运行
gnome-terminal -- /bin/bash -c "source .bashrc && echo \$VARIABLE && echo $VARIABLE"
但它输出两个空行。有趣的是,如果我运行
gnome-terminal -- /bin/bash -c "cat .bashrc"
.bashrc
它显示了其中预期的内容VARIABLE
。我该如何解决这个问题?我也试过了--rcfile ~/.bashrc
,没成功。
答案1
这里的问题是bash -c
打开一个非交互式shell,并且(至少在默认的 Ubuntu ~/.bashrc 的情况下,从帐户创建时的 /etc/skel 复制而来),接近顶部有这样的内容:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
因此,除非你添加并导出你的VARIABLE
前否则,它将被跳过。你可以
gnome-terminal -- /bin/bash -ic "source ~/.bashrc && echo \"\$VARIABLE\"; read"
或(简化引用)
gnome-terminal -- /bin/bash -ic 'source ~/.bashrc && echo "$VARIABLE"; read'
(我添加了read
以防止终端随 shell 退出,因为我的 gnome-terminal 配置文件默认这样做)。
答案2
从图形环境启动的程序看不到 中的变量.bashrc
。而是[some file name].sh
在 中创建/etc/profile.d
并在那里设置这些变量。