在bash中运行命令并使其保持运行,直到用户选择no选项

时间:2017-07-18 03:41:49

标签: bash loops

如何使这项工作?我真的想靠自己学习。 但我真的没有得到这个。我想在中运行一个命令 后台并提示用户是否希望它继续运行 或不。如果没有,请终止命令。我知道我错过了什么。我只是 不确定是什么。

这是我的代码:

command > /dev/null 2>&1 &
echo

until [[ $REPLY =~ ^[Yy]$ ]] ;
do
    echo
    read -p "Would you like to stop the command [Yy/Nn]? " -n 1 -r 

    # Stop stop the command
    killall -9 command
done

1 个答案:

答案 0 :(得分:0)

有点不清楚你想要你的循环频率,但假设你只想阻止用户键入Yy,你可以在后台启动command,保存它< em>进程ID (例如PID)使用bash特殊变量$!。然后只需循环直到获得Yy(在bash中,您只需使用参数展开 ${var,,}来评估小写中的var )。收到Yy答案后(使用ans作为存储响应的变量),您可以执行以下操作:

#!/bin/bash

command & >/dev/null 2>&1   # start command in background
cmdpid=$!                   # save the PID of command

ans=
while :; do                 # infinite loop until y or Y
    printf "\nWould you like to stop the command (y/n)? "
    read -n 1 -r ans        # read ans
    [ "${ans,,}" = 'y' ] && break
done
printf "\nkilling proc: %d\n" "$cmdpid"
kill $cmdpid                # kill the PID

示例使用/输出

(上面没有实际开始command(因为我不知道它是什么))

$ bash rununtil.sh

Would you like to stop the command (y/n)? k
Would you like to stop the command (y/n)? i
Would you like to stop the command (y/n)? l
Would you like to stop the command (y/n)? l
Would you like to stop the command (y/n)? Y
killing proc

仔细看看,如果您有其他问题,请告诉我。