Shell 脚本无法通过键盘快捷键运行

Shell 脚本无法通过键盘快捷键运行

我有两个显示器,DVI-0 和 DVI-1,每次只使用一个。它们位于房子的不同房间,我想使用键盘快捷键在它们之间切换。我编写了以下 shell 脚本来切换到非活动显示器:

current_display=$(xrandr | sed -n 's/^\(.*\) connected primary.*$/\1/p')

if [ "$current_display" == "DVI-0" ]
then
 xrandr --output DVI-1 --auto --primary
 xrandr --output DVI-0 --off 
elif [ "$current_display" == "DVI-1" ]
then
 xrandr --output DVI-0 --auto --primary
 xrandr --output DVI-1 --off 
fi

我将其保存为 /home/username/Documents/SwitchDisplay.sh 并使其可执行。/home/username/Documents/SwitchDisplay.sh从终端运行时,它会执行我想要的操作。但是当我/home/username/Documents/SwitchDisplay.sh使用 Ubuntu 中的“设置/设备/键盘”选项将其分配给键盘快捷键 (ctrl+alt+s) 时,它不起作用。

我通过将命令分配 firefox给快捷方式来检查快捷方式是否有效,结果一切正常。当我按下键盘快捷键时,Firefox 会打开。我甚至firefox在 shell 脚本中添加了一个新行,并再次将 shell 脚本分配给快捷方式,然后按下快捷方式也会打开 Firefox。因此它确实运行了 shell 脚本,但 shell 脚本的重要部分无法正常工作。

有谁知道如何让它工作吗?

答案1

您在脚本 if 子句中使用了双等号。这是 bashism(在 BASH 上没问题,但在其他 shell 中会失败)。我相信脚本是由 和 而dash不是处理的bash,因此请将其替换===并尝试一下。

通过在脚本的第一行添加一个 shebang 来指示要使用的 shell,可以避免这种“shell 不确定性”。如果您尝试过#!/bin/bash,如评论中所建议的那样,使用原始脚本的快捷方式应该可以工作。但是,如果您可以使代码更具可移植性(使用单个等号而不是双等号),为什么不呢?


一些批判观点:https://mywiki.wooledge.org/Bashism

哦,这是一个非常好的 wiki,可以学习可靠的 shell 脚本。

相关内容