通过键(如ENTER或ESC)在bash中创建中断

我需要知道是否可以使用ESCENTER键来打断bash脚本? 通过发送SIGINT /CTRL + C我能够做到,但由于某些原因(请查看最后一行中的注释),我无法使用CTRL +C 所以我需要有一些自定义的方式来引起中断。

换句话说:在下面的脚本中,当CTRL + C被按下时, cleanup函数被调用。 现在需要修改此行为,以便在按下某些键(如ENTERESC )时应该调用cleanup函数。

cleanup() {

#do cleanup and exit
echo "Cleaning up..."
exit;

}
echo "Please enter your input:"
read input

    while true
        do
          echo "This is some other info MERGED with user input in loop + $input"
          sleep 2;
          echo "[Press CTRL C to exit...]"
          trap 'cleanup'  SIGINT
        done

查询:

  • 是否有可能使用自定义键在bash中引起中断?
  • 如果可能的话,如何实现它?
  • 注意:

    原因:该脚本是从另一个具有自己的陷阱处理的C ++程序调用的。 因此,该脚本的陷阱处理与父程序冲突,最终终端被挂起。 在我的组织中,程序的代码被冻结,所以我不能改变它的行为。 我只需要调整这个子脚本。


    下面的工作^ M为ENTER和^ [为ESC但可能

    stty intr ^M 
    stty intr ^[ 
    

    但无法使用ENTER键恢复默认值后

    stty intr ^C
    

    在发表评论之后,由于shell是交互式的,所以要求继续使用陷阱,而且还可以在特殊的EXIT陷阱中进行清理。

    如何在Linux shell脚本中提示是/否/取消输入?

    或者使用select的另一个解决方案

    echo "Do you want to continue?"
    PS3="Your choice: "
    
    select number in Y N;
    do
        case $REPLY in
        "N")
            echo "Exiting."
            exit
            ;;
        "Y")
            break
            ;;
        esac
    done
    # continue
    

    这是一个肮脏的伎俩,正在做我的工作很好。 readcase说明选项是关键。 在这里,我正在read命令超时,这样,除非escenter被按下,否则true继续。

    cleanup() {
    
    #do cleanup and exit
    echo "Cleaning up..."
    exit;
    
    }
    
    exitFunction()
    
    {
    echo "Exit function has been called..."
    exit 0;
    }
    mainFunction()
    {
        while true
            do
              echo "This is some other info MERGED with user input in loop"
              IFS=''
              read -s -N 1 -t 2 -p  "Press ESC TO EXIT or ENTER for cleanup" input
              case $input in
                    $'x0a' ) cleanup; break;;
                    $'e'   ) exitFunction;break;;
                          * ) main;break;;
              esac
            done
    }
    
    mainFunction
    
    链接地址: http://www.djcxy.com/p/25559.html

    上一篇: Create interrupt in bash by keys like ENTER Or ESC

    下一篇: script sh : command wait an input from keyboard, but script type the input