我有以下任务:
这些脚本提示用户输入参数,最后根据这些参数运行特定命令。 (想象一下脚本,它首先提示输入文件名,然后提示输入参数chmod
)。
问题是,脚本必须由特定的按键序列终止(例如,当用户键入“halt”而不输入Ctrl“-”时C)。
答案1
您可以使用read
with-n 1
逐个字符地读取并构建您所读取的字符串。然后你可以决定每个角色出现时要做什么:
val=""
while read -n 1 char; do
if [[ $char = "" ]]; then
printf 'Got an enter and the string is %s' "$val"
# do whatever else you want with it here
val="" # reset it to get the next param
else
val="$val$char" # append input
fi
if [[ $val = "halt" ]]; then
exit
fi
done
答案2
根据任务的描述,您不应该逐个字符地处理输入。一行一行地读就可以了。逐个字符地阅读不会对你有帮助。
如果除了退出脚本之外不需要对Ctrl+执行任何操作,则不要执行任何操作。C这是默认行为。
如果您需要在Ctrl+上运行一些自定义代码C(可能会或可能不会通过退出脚本来结束),终端驱动程序中有一个内置机制。按此键发送信号 信号情报。在 shell 中定义一个陷阱为信号。
cleanup () {
… whatever you need to do before the script exits …
}
trap 'echo >&2 "Aborting"; cleanup; exit 130' INT
while IFS= read -r line; do
…
done