Fish shell:在当前 shell 之外设置变量

Fish shell:在当前 shell 之外设置变量

我想创建一个变量$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

相关内容