首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只在函数中设置Fish环境变量一次

只在函数中设置Fish环境变量一次
EN

Stack Overflow用户
提问于 2016-12-02 14:39:46
回答 2查看 541关注 0票数 0

我想用鱼做壳。当我使用LightDM登录时,我希望启动某些Xsession应用程序,但只有在LightDM开始调用shell时才能启动。

我在~/..config/fish/config.fish中尝试过这样的方法:

代码语言:javascript
运行
复制
###################################################################
# 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然后启动背景中的所有应用程序,并在最后设置环境变量,如下所示:

代码语言:javascript
运行
复制
set -xg XSESSION_STARTED "t"

但是XSESSION_STARTED似乎并没有被设置为“t”,而且每次都会调用xsession-app函数,即使我在gnome期间启动了一个新的终端。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-02 18:04:36

即使我在gnome学期内开办了一个新的终端。

这是意料之中的。全局变量在特定的鱼类中设置。如果您启动另一个鱼,它将不会有它(除非您在该鱼内部启动它,因为变量是导出的)。

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

  • 不要在config.fish中这样做--使用DE的自动启动机制,或者至少使用~/..xinitrc。这是最好和最干净的方法,并且独立于您的shell。
  • 使用通用变量--这些变量被持久地存储,并为机器上的所有鱼会话共享。这里的问题是使它无效--当您注销/重新启动时,您需要重新设置变量,但是如果您的机器崩溃了,就不会发生这种情况。
  • 在tmpfs上使用标志文件(即在RAM中)--如果机器停止,不管是什么原因,这将自动失效。不过,您需要为此设置一个tmpfs。
票数 1
EN

Stack Overflow用户

发布于 2016-12-15 15:50:46

下面是我在~/..xsessionrc中使用的代码:

代码语言:javascript
运行
复制
# Apps launched directly by X window managers don't have their environment set
if [ $SHELL = "/usr/bin/fish" ]
then
    /usr/bin/fish -c xsession-apps
else
   source ~/src/dotfiles/keychain.sh
   source ~/src/dotfiles/shell/aliases
   source ~/src/dotfiles/shell/env
   source ~/src/dotfiles/xsession-apps

   eval "$(~/.rbenv/bin/rbenv init -)"
fi

它初始化鱼或bash/zsh,这取决于我当时的心情。最近我喜欢吃鱼。然后,我定义了一个名为xsession-apps的fish函数来启动我希望在X会话中启动的东西,比如dropbox、hplip、xmobar等等。我有一个类似于bash脚本(也称为xsession-apps )的设置,如果我不使用fish,就会获得它的源代码。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40934728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档