仅当终端从 GUI 内启动时运行 .bashrc

仅当终端从 GUI 内启动时运行 .bashrc

有些类似的问题似乎与我的问题不太相符。我试图做的是.bashrc(或类似地)只在从 GUI(Xfce)内启动时运行某些自定义命令,而不是在初始登录屏幕中运行。

一些细节:

  • Windows 主机上的 Ubuntu 16.04 虚拟机(VirtualBox 5.2.10)
  • vagrant当我启动它时,我使用启动登录屏幕中的用户
  • 我通常使用以下命令手动启动 Xfcesudo startxfce4
  • 然后,一旦 GUI 加载完毕,我启动一个终端(Terminator)并为用户运行vagrant

那么目前发生的情况是:

  1. 我启动虚拟机
  2. 它在启动屏幕上询问用户
  3. 然后它将使用.bashrc该用户的并执行我在那里的命令。我希望它们仅在我使用 GUI 终端时运行(这是我的问题——如何做到这一点?
  4. 启动 GUI
  5. 然后,当我在 GUI 中启动终端时,它将再次运行相同的命令。

我希望发生的事情是:

  1. 启动虚拟机
  2. 以用户身份登录 - 并且不要运行指定的命令
  3. 启动 GUI
  4. 从 GUI 启动终端 - 现在它应该自动运行命令

因此,基本上,我正在寻找某种系统标志,表明它未在 GUI 上运行。这样的标志存在吗?我想您可以从某个地方检查它,例如xfce status或类似的地方?

关键是,我希望它自动运行,而不是从 PATH 运行脚本,因为这很容易忘记,而且您可能会花费相当多的时间来调试为什么某些东西不起作用,结果却发现您忘记运行先决条件命令了。

谢谢!

答案1

shell 变量TERM

我认为您可以使用“if”或“case”语句检查 shell 变量的值TERM来控制在文本屏幕和图形桌面环境中执行的操作。

它已在默认的 bash 配置文件中使用~/.bashrcUbuntu 桌面的文件。

  • 在 Ubuntu 18.04 LTS 图形桌面中:

    $ echo "$TERM"
    xterm-256color
    

    这可能因 Ubuntu 版本而异。检查你的已安装的系统。

  • 在 Ubuntu 18.04 LTS 文本屏幕中:

    $ echo "$TERM"
    linux
    

演示示例

在 bash 配置文件中添加“if”语句~/.bashrc

在执行此操作之前最好先进行备份。

cp -p ~/.bashrc ~/.bashrc.backup

然后在文件末尾添加类似以下几行的内容(针对您的特定目的进行了修改)~/.bashrc

if [ "$TERM" != "linux" ]
then
 echo "Do your commands for a graphical desktop"
 ...
 ...
fi

相关内容