2017-08-01 84 views
0

由于我还没有找到好的Linux闹钟,因此我正在创建闹钟脚本,并且我决定学习Bash脚本(再次)是个好主意, 。我正在研究制作一个播放闹钟声音的程序(蜂鸣声完整音量),我希望程序能够在关闭声音之前解决一些基本代数问题。然而,我无法弄清楚如何在播放声音的同时寻求解决方案并等待我的输入,这样可以消除噪音。我甚至不知道我会用什么表达来强制mpv在后台严格执行。 &;等待行终止,我无法通过使用parallel来解决它。我也尝试将输出指向/dev/null,因为这似乎是其他人的答案,但它不适用于我的问题(在mpv终止之前没有任何反应,这似乎很明显,因为它只忽略输出权限?)。如何在Bash中运行程序时播放声音文件

这是我到目前为止已经完成(非常基本的,只具有结构,所以我可以用它进行编程):

# !/bin/zsh 

function math(){ 
    echo MATH 
    read answer 
    if ((("$answer") == $1)); then 
     echo PASS  
    else 
     echo FAIL 
    fi 
} 

echo 'Alarm' 

let "NUM1=(($RANDOM % 10) * 3)"; 
let "NUM2=(($RANDOM % 10) * 3)"; 

let "m = $NUM1 * $NUM2" 

printf "%d * %d = %d" "$NUM1" "$NUM2" "$m" 

mpv alarm_sound.wav ; #>/dev/null 2>&1 
math m 

echo MATH来后mpv完成播放的声音。

我的梦想是让mpv充当一个完全独立的过程,以便if条件“通过”时不会影响alarm.sh,然后kill -9 mpv

我完全失去了 - 在此先感谢!

+0

看看Bash的'coproc'关键字。 – RTLinuxSW

回答

1

和往常一样,Linux有很多可行的解决方案来解决你的困境。

想到的最简单的就是在你的命令的年底进入&标志:

mpv audio_file.wav & 

这应该产生新的进程的音频文件。

+0

谢谢。我实际上想过'&',但我没有意识到这两个命令必须分开。我试着像'command1&command2'那样把它当作刺激性的运行,但显然这是一个非常不同的事情。在另一行上键入'command1&'在另一行上运行,'command2'在另一行上运行。 – Jareg