仅在函数中设置鱼类环境变量

时间:2016-12-02 14:39:46

标签: shell environment-variables fish

我想用鱼作为我的贝壳。当我使用LightDM登录时,我想启动某些Xsession应用程序,但仅限于LightDM在一开始就调用shell。

我在〜/ .config / fish / config.fish中试过这个:

###################################################################
# Start xsession applications, but only once.
if test -z "$XSESSION_STARTED"
  set -xg XSESSION_STARTED 'f'
end

if test "$XSESSION_STARTED" = 'f'
  xsession-apps
end

xsession-apps函数然后在后台启动所有应用程序,并在最后设置环境变量,如下所示:

set -xg XSESSION_STARTED "t"

但是XSESSION_STARTED似乎没有设置为' t'并且每次都会调用xsession-apps函数,即使我在gnome-term中开始一个新的终端。

我错过了什么。有没有更好的方法来解决这个问题?

2 个答案:

答案 0 :(得分:1)

  

即使我在gnome-term中开始一个新的终端。

这是可以预料的。全局变量设置在该特定鱼类中。如果你开始另一条鱼,它将没有它(除非你在那条鱼里面开始,因为变量被导出)。

有几种方法可以解决这个问题:

  • 根本不要在config.fish中这样做 - 使用DE的自动启动机制或至少〜/ .xinitrc。这是最好,最干净的方法,独立于你的shell。

  • 使用通用变量 - 这些变量持久存储并共享给机器上的所有鱼会话。这里的问题是使它失效 - 你需要在注销/重启后再次取消设置变量,但是如果你的机器崩溃就不会发生

  • 在tmpfs(即RAM)中使用标志文件 - 如果您的机器停止,无论原因是什么,这将自动失效。不过,你需要为它设置一个tmpfs。

答案 1 :(得分:0)

这是我在〜/ .xsessionrc中使用的代码:

HttpGet

它初始化鱼或bash / zsh,取决于我当时的心情。最近,我喜欢鱼。然后我定义了一个名为@if ($model->child_object_that_may_be_null) {{ $model->child_object_that_may_be_null->interesting_property }} @endif 的鱼函数来启动我希望在我的X会话中启动的东西,例如dropbox,hplip,xmobar等。我有一个类似于bash脚本的设置,也称为{{1如果我不使用鱼,它会被获取。

顺便说一句,我使用xmonad作为我的窗口环境。