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 -ef
和 ps ax
在打印一些值的顺序上存在差异...
另外我不得不承认第 10 行的结尾看起来很糟糕。它必须是 ...print }'`
。因为ps -ef
和ps ax
的区别当然是...print }'`
.
顺便说一句。依赖项是 xsel
和 espeak-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
要在 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 -ef
和 ps ax
在打印一些值的顺序上存在差异...
另外我不得不承认第 10 行的结尾看起来很糟糕。它必须是 ...print }'`
。因为ps -ef
和ps ax
的区别当然是...print }'`
.
顺便说一句。依赖项是 xsel
和 espeak-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