Bash-通过键盘快捷键切换espeak的脚本

Bash-script to toggle espeak by keyboard shortcut

要在 GUI 中大声朗读选定的文本,我使用命令 xsel | espeak-ng -v mb-us3 -p3 -s135。 为了阻止它,我使用 killall -s STOP espeak-ng。 重新开始 killall -s CONT espeak-ng.

所有 3 个命令都有效,但我这个菜鸟不会让我存档正确的结果。我认为问题出在 if 和 case 语句中。我将它们分配给了键盘快捷键。

如果 espeak-ng 已经 运行,我想管理这个 shellscript 在大声朗读和停止大声朗读之间切换。如果还没有 运行,bash 应该启动它。

0 #!/bin/bash
1 # Name: espeak-en.sh
2 # Author: Karsten Zarth
3 # Created: 2020-08-23
4 # Description: Textselection in GUI is read aloud with english
5 #              male voice with espeak-ng and mbrula
6 #              if already reading: stop
7 #              if stopped: continue
8 # Modified: 2020-08-23
9
10 status=`ps -ef| grep espeak-ng| grep -v grep| awk '{print }"`
11
12 if [[ $(pgrep -x espeak-ng) ]]
13         then
14                 case $status in
15                         Tl) killall -s CONT espeak-ng;;
16                         Sl) killall -s STOP espeak-ng;;
17                 esac
18         else
19                 xsel | espeak-ng -v mb-us3 -p3 -s135
20 fi

我什至不知道如何测试输出:if [[ $(pgrep -x espeak-ng) ]]

有人可以帮我找出问题所在并给我一些提示吗?非常感谢。

经过自己一番努力后,我发现 ps -efps ax 在打印一些值的顺序上存在差异...

另外我不得不承认第 10 行的结尾看起来很糟糕。它必须是 ...print }'` 。因为ps -efps ax的区别当然是...print }'` .

顺便说一句。依赖项是 xselespeak-ng 以及至少一个 mbrola-voice.

现在可以了。这是完整的代码:

0 #!/bin/bash
1 # Name: espeak-en.sh
2 # Author: Karsten Zarth
3 # Created: 2020-08-23
4 # Description: Textselection in GUI is read aloud with english
5 #              male voice with espeak-ng and mbrula
6 #              if already reading: stop
7 #              if stopped: continue
8 # Modified: 2020-08-24
9
10 status=`ps ax| grep espeak-ng| grep -v grep| awk '{print }'`
11
12 if [[ $(pgrep -x espeak-ng) ]]
13         then
14                 case $status in
15                         Tl) killall -s CONT espeak-ng;;
16                         Sl) killall -s STOP espeak-ng;;
17                 esac
18         else
19                 xsel | espeak-ng -v mb-us3 -p3 -s135
20 fi