我有两个显示器,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 脚本。