【发布时间】:2012-10-14 23:57:20
【问题描述】:
我正在编写一个 bash 包装器来学习一些脚本概念。这个想法是在 bash 中编写一个脚本,并在登录时将其设置为用户的 shell。
我在reads 和evals 用户的输入中创建了一个while 循环,然后注意到,每当用户输入CTRL + C 时,脚本都会中止,因此用户会话结束。
为了避免这种情况,我困住了SIGINT,在圈内什么都不做。
现在的问题是,当您在命令的一半处键入 CTRL + C 时,它不会像在 bash 上那样被取消 - 它只是忽略了 CTRL + C。
所以,如果我输入ping stockoverf^Cping stackoverflow.com,我会得到ping stockoverfping stackoverflow.com,而不是我想要的ping stackoverflow.com。
有什么办法吗?
#!/bin/bash
# let's trap SIGINT (CTRL + C)
trap "" SIGINT
while true
do
read -e -p "$USER - SHIELD: `pwd`> " command
history -s $command
eval $command
done
【问题讨论】: