有些类似的问题似乎与我的问题不太相符。我试图做的是.bashrc
(或类似地)只在从 GUI(Xfce)内启动时运行某些自定义命令,而不是在初始登录屏幕中运行。
一些细节:
- Windows 主机上的 Ubuntu 16.04 虚拟机(VirtualBox 5.2.10)
vagrant
当我启动它时,我使用启动登录屏幕中的用户- 我通常使用以下命令手动启动 Xfce
sudo startxfce4
- 然后,一旦 GUI 加载完毕,我启动一个终端(
Terminator
)并为用户运行vagrant
那么目前发生的情况是:
- 我启动虚拟机
- 它在启动屏幕上询问用户
- 然后它将使用
.bashrc
该用户的并执行我在那里的命令。我希望它们仅在我使用 GUI 终端时运行(这是我的问题——如何做到这一点?) - 启动 GUI
- 然后,当我在 GUI 中启动终端时,它将再次运行相同的命令。
我希望发生的事情是:
- 启动虚拟机
- 以用户身份登录 - 并且不要运行指定的命令
- 启动 GUI
- 从 GUI 启动终端 - 现在它应该自动运行命令
因此,基本上,我正在寻找某种系统标志,表明它未在 GUI 上运行。这样的标志存在吗?我想您可以从某个地方检查它,例如xfce status
或类似的地方?
关键是,我希望它自动运行,而不是从 PATH 运行脚本,因为这很容易忘记,而且您可能会花费相当多的时间来调试为什么某些东西不起作用,结果却发现您忘记运行先决条件命令了。
谢谢!
答案1
shell 变量TERM
我认为您可以使用“if”或“case”语句检查 shell 变量的值TERM
来控制在文本屏幕和图形桌面环境中执行的操作。
它已在默认的 bash 配置文件中使用~/.bashrc
Ubuntu 桌面的文件。
在 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