Win*_*nix 6 bash nautilus symbolic-link
我在 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
Run Code Online (Sandbox Code Playgroud)
我检查了软链接,它看起来没问题:
lrwxrwxrwx 1 rick rick 30 Mar 26 10:14 Link to grub-display.sh -> /home/rick/bin/grub-display.sh*
Run Code Online (Sandbox Code Playgroud)
请注意,这是我今天刚刚发布的全新脚本:如何在不启动的情况下显示 grub 菜单和选项?. 在脚本中,clear
使用的命令与此处和此处的TERM
另一个线程中的错误消息相关联:如何修复 eclipse 中的“未设置 TERM 环境变量”警告
journalctl
上面错误消息的一些解决方案需要查看:
$ env | grep TERM
TERM=xterm-256color
Run Code Online (Sandbox Code Playgroud)
我想知道~/.bashrc
当您打开终端时是否会出现这种情况,但在桌面快捷方式(链接)直接运行终端命令时会丢失?
在grub-display.sh
bash脚本从终端窗口中运行完全正常。
如何修复 Nautilus 为我创建的出现故障的桌面链接?
问题是脚本依赖于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
Run Code Online (Sandbox Code Playgroud)
在 Nautilus 中创建链接test-term.sh
并运行该链接。然后检查输出文件:
$ cat ~/Downloads/test-term.txt
TERM environment variable: dumb
Using env | grep TERM output below:
(... blank line appears here ...)
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,使用该命令时环境变量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
Run Code Online (Sandbox Code Playgroud)