我想在 bash 中创建一个重复函数,每次按下任意键时都会运行相同的三个命令。
在 Windows 中,我可以通过在批处理文件中无限循环中使用暂停命令来完成此操作,这可以很好地满足我的需求。
大多数 *nix 发行版没有等效的暂停命令,并且read -p
无法按照我想要的方式运行。
完成我需要的最好方法是什么?此外,当输入某个组合键(比如Ctrl- )时,是否可以执行不同的命令(用于清理) ?C
答案1
假设使用 bash,该read
选项-N
可能有用:
-N nchars return only after reading exactly NCHARS characters, unless
EOF is encountered or read times out, ignoring any delimiter
如果使用read -N 1 x
,则输入字符后它将立即返回,而无需等待换行符。
关于问题的第二部分,点击 Ctrl-C将 INT 信号发送到您的脚本;拦截只是捕获该信号的简单问题。
将所有内容放在一起的示例:
trap 'echo special command' INT
while read -N 1 foo; do
echo normal command
done
还有一个交互示例(我点击了x两次,然后 Ctrl点击了C一次):
xnormal command
xnormal command
^Cspecial command
(请注意,退出此脚本会很烦人;一种方法是使用 - 停止它Ctrl,Z然后终止该作业。)