Hot Corners 音乐序列命令脚本

Hot Corners 音乐序列命令脚本

我正在编写一个脚本,它使用热角在角落悬停时播放特定的音符,并根据音乐序列执行特定的命令。

该脚本使用参数 -d 从左下角、-e 从右下角、-g 从左上角、-b 从右上角调用,将序列附加到文件 (~/bin/for_hot) 中,并将序列与我的关联数组进行比较。当识别出序列时,播放成功的音乐 B''。

2 个问题:

有时即使播放了成功的声音,命令也不会执行;

我无法关机。[已解决]

我认为我没有在之后充分监控进程(kill,background),而且我附加的文件(~/bin/for_hot)可能无法及时写入。

这是脚本,请注意我是 Linux 新手,所以不要太讨厌我的代码、我的问题:

#!/bin/bash

#switch###############################
case "$1" in
-d) play -q -n synth 3 pluck 293.665 &
sleep 0.5
echo -n "d" >> ~/bin/for_hot;
;;
-e) play -q -n synth 3 pluck 311.127 &
sleep 0.5
echo -n "e" >> ~/bin/for_hot;
;;
-g) play -q -n synth 3 pluck 391.995 &
sleep 0.5
echo -n "g" >> ~/bin/for_hot;
;;
-b) play -q -n synth 3 pluck 466.164 &
sleep 0.5
echo -n "b" >> ~/bin/for_hot;
;;
esac
######################################

#midi mappings########################
declare -A commands
commands=( 
["egbd"]="firefox -n" 
["ebgb"]="idea" 
["ebb"]="notify-send "$instr "" 
["egdgb"]="echo pass | sudo -S poweroff"
["ee"]="nemo /home/mintbwoy");
######################################


s=$(<~/bin/for_hot);

for pattern in "${!commands[@]}";
do
echo "$pattern - ${commands["$pattern"]}";

if [[ "$s" == *"$pattern"* ]]
then
echo -n "" > ~/bin/for_hot;
play -q -n synth 3 pluck 932.328 &
var=$(${commands["$s"]});
$var;
notify-send "[$pattern] = ${commands["$pattern"]} "$var"";
fi

done
######################################

答案1

我使用 eval 执行命令并:

var=$(${命令["$s"]})已改为

var=$(${命令["$pattern"]})因为我引用的是文件内容而不是实际的模式。

相关内容