我正在编写一个 bash 包装器来学习一些脚本概念。这个想法是在 bash 中编写一个脚本,并在登录时将其设置为用户的 shell。
我做了一个 while 循环read
s 和eval
s 用户的输入,然后注意到,每当用户键入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