我想创建一个变量$EIGEN
来保存我安装 Eigen 库的路径,以便与我的编译器链接。为此,我使用了set EIGEN path/to/eigen
但是如果我echo $EIGEN
在另一个 shell 中则没有输出。
答案1
如果您想要为每个启动的 shell 设置一个变量,那么您应该编辑默认配置文件。
默认情况下,该文件位于~/.config/fish/config.fish
,即~
您的用户主目录。如果您没有该文件,则应创建它。在该文件中,您可以输入$EIGEN
在普通 shell 中设置该值的相同命令。
更多详情请访问Fish Shell 常见问题解答
如果您需要为每个程序设置值,那么您应该查阅操作系统的文档,它会告诉您如何全局设置环境变量。
答案2
简短回答:
set -Ux EIGEN /path/to/eigen
解释:
Fish 的差异化特征之一是能够设置“通用变量”,即:
- 执着的
- 立即在所有 shell 实例中可用
创建-U
一个通用变量,并将-x
其标记为已导出。
请注意,如果您已经有在另一个 shell 实例中设置$EIGEN
,该“本地”或“全局”变量将覆盖通用变量。
这是一个病态的、过于简单的例子:
> set EIGEN /bad/path/to/eigen
> set -Ux EIGEN /correct/path/to/eigen
> set --show EIGEN
> echo $EIGEN
/bad/path/to/eigen
> set --show EIGEN
set: Universal variable 'EIGEN' is shadowed by the global variable of the same name.
$EIGEN: set in global scope, unexported, with 1 elements
$EIGEN[1]: |/bad/path/to/eigen|
$EIGEN: set in universal scope, exported, with 1 elements
$EIGEN[1]: |/correct/path/to/eigen|
此外,从您的问题中不太清楚您是否指的是这样的事情,从以下开始fish
:
> set EIGEN /path/to/eigen
echo $EIGEN
/path/to/eigen
bash
$ echo $EIGEN
# No output
这甚至不需要通用变量,只需要导出变量即可。默认情况下(在大多数 Linux/Unix shell 中),仅为当前 shell 设置变量。从该 shell 创建的新进程看不到该变量。为了使其可用于子 shell 和其他启动的进程,需要将其标记为导出。我将切换到bash
这里作为示例,因为我们已经在上文中演示了如何在 中将其标记为导出fish
。如上所述,我将使用 来$
表示 Bash 提示符并>
使用 来表示 Fish:
$ EIGEN=/path/to/eigen
$ fish
> echo $EIGEN
> exit
$ echo $EIGEN
/path/to/eigen
$ export EIGEN
$ fish
> echo $EIGEN
/path/to/eigen