linux - 通过 ENTER 或 ESC 等键在 bash 中创建中断

标签 linux bash shell

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

换句话说:在下面的脚本中,cleanup 函数在按下 CTRL + C 时被调用。现在需要修改此行为,以便在按下 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

查询:

  1. 是否可以使用自定义键在 bash 中引起中断?
  2. 如果可能,如何实现?

注意事项:

原因:此脚本是从另一个具有自己的陷阱处理的 C++ 程序调用的。所以这个脚本的陷阱处理与父程序冲突,最终导致终端挂起。在我的组织中,该程序的代码已被卡住,因此我无法更改其行为。我只需要调整这个子脚本。

最佳答案

这是一个肮脏的把戏,它可以很好地完成我的工作。 readcase 语句选项是关键。在这里,我对 read 命令进行了超时处理,以便 true 继续执行,除非按下 escenter

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

关于linux - 通过 ENTER 或 ESC 等键在 bash 中创建中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44039963/

相关文章:

linux - 无法重新启动 Aptana Studio 3

linux - 证书公用名 `*.c.ssl.faSTLy.net' 与请求的主机名不匹配

bash - 使用括号对表达式进行分组以防万一

bash - 使用 grep 命令但仅用于文件的最后几行?

linux - 在 Linux 上为 Windows 每晚构建

php - php 中的 Linux uptime 命令不显示任何内容

bash - 删除除最后一场比赛以外的所有比赛

linux - Eclipse 的一个窗口中的 Bash shell

mysql - 比较同一组字符的加密值

java - 如何从 Java 运行 shell 脚本并让它在 JVM 关闭后继续运行?