要在图形用户界面中大声朗读选定的文本,我使用命令xsel | espeak-ng -v mb-us3 -p3 -s135。为了停止它,我使用了killall -s STOP espeak-ng。要重新启动它,killall -s CONT espeak-ng。
这3个命令都能用,但是我这个菜鸟不让我把正确的结果归档。我认为问题出在if- and case-语句中。我给他们分配了一个键盘快捷键。
我想管理这个espeak脚本,以便在高声朗读和停止高声朗读进程之间切换,前提是espeak ng已经运行。如果它还没有运行,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 $5}"`
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) ]]的输出:
有人能帮我找出哪里出了问题并给我一些提示吗?在此之前,非常感谢您。
发布于 2020-08-25 02:06:04
经过我自己的努力,我发现ps -ef和ps ax在打印一些值的顺序上是有区别的……
另外,我必须承认第10行的结尾看起来很糟糕。它必须是...print $5}'`。由于ps -ef和ps ax之间的不同,它当然必须是...print $3}'`。
顺便说一下。依赖项是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 $3}'`
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 fihttps://stackoverflow.com/questions/63551590
复制相似问题