我在 Nautilus 目录中~/bin
为位于该目录中的 bash 脚本创建了一个链接。然后我将链接剪切并粘贴到~/Desktop
目录中。
当我单击它时,屏幕上什么也没有出现。如果我右键单击链接并选择,Run
也不会出现任何内容。但我知道它正在运行,因为conky
显示多个 CPU 负载很高。正常的 CPU% 应该是 5% 到 8%,但它徘徊在 79% 左右。链接的每个实例占用大约 5% 的 CPU,另外systemd
日志记录占用 5% 的 CPU。温度通常小于 50C,但在这种情况下,它徘徊在 75C 左右。
我仔细检查了一下journalctl
,发现了有问题/循环的问题:
$ journalctl -b-1 | grep 'TERM environment variable not set.' | wc
35763 357630 3325959
我检查了软链接并且看起来没问题:
lrwxrwxrwx 1 rick rick 30 Mar 26 10:14 Link to grub-display.sh -> /home/rick/bin/grub-display.sh*
笔记这是我今天刚刚发布的全新脚本:如何在不启动的情况下显示 grub 菜单和选项?. 在脚本中clear
使用链接到TERM
另一个线程中的错误消息的命令这里和这里:如何修复 eclipse 中的“TERM 环境变量未设置”警告
上述错误消息的一些解决方案journalctl
需要查看:
$ env | grep TERM
TERM=xterm-256color
我想知道~/.bashrc
当您打开终端时是否会发生这种情况,但是当桌面快捷方式(链接)直接运行终端命令时是否会丢失?
bashgrub-display.sh
脚本在终端窗口运行得很好。
我该如何修复 Nautilus 为我创建的这个故障的桌面链接?
答案1
问题是脚本依赖于TERM
正在设置的环境变量。调用脚本时,Ubuntu Unity Desktop 不会初始化此变量。如果您使用Ctrl++打开终端Alt,T则变量已设置。
为了测试您的系统,请创建一个名为的小脚本test-term.sh
并使其看起来像这样:
#!/bin/bash
#See if $TERM has been set when called from Desktop shortcut
echo TERM environment variable: $TERM > ~/Downloads/test-term.txt
echo "Using env | grep TERM output below:" >> ~/Downloads/test-term.txt
env | grep TERM >> ~/Downloads/test-term.txt
exit 0
在 Nautilus 中创建一个链接test-term.sh
并运行该链接。然后检查输出文件:
$ cat ~/Downloads/test-term.txt
TERM environment variable: dumb
Using env | grep TERM output below:
(... blank line appears here ...)
如您所见,使用TERM
该命令时环境变量为空env | grep TERM
。此外,变量$TERM
设置为dumb
与基于颜色、支持鼠标的命令不太相符dialog
。
样板解决方案
短期解决方案是在相关两个脚本的顶部包含样板代码:
# $TERM variable may be missing when called via desktop shortcut
CurrentTERM=$(env | grep TERM)
if [[ $CurrentTERM == "" ]] ; then
notify-send --urgency=critical "$0 cannot be run from GUI without TERM environment variable."
exit 1
fi
答案2
“解决方案”是不要在没有检查退出状态的情况下重复运行所需环境之外的程序. dialog
、whiptail
等适用于终端,因此当然需要TERM
设置。因此,您应该在终端中运行这些脚本。如果您的“高级” zenity、yad 等没有 X11/Wayland 显示,也会发生同样的事情。
在您的脚本中,您检查了输出,dialog
同时将错误输出重定向为正常输出。因此,当对话框“崩溃并烧毁”并打印错误消息时,您会在 if 条件中比较错误输出!您为什么要这样做?