Как я могу поймать CTRL +D клавиатуры в ksh
и после выхода?Поймайте CTRL + D в KSH
while true; do
read cmd
echo $cmd
if [ "$cmd" = "?????" ]; then
break
fi
done
Как я могу поймать CTRL +D клавиатуры в ksh
и после выхода?Поймайте CTRL + D в KSH
while true; do
read cmd
echo $cmd
if [ "$cmd" = "?????" ]; then
break
fi
done
CTRL - D это "конец файла (EOF)" и то, что вам нужно сделать, это "ловушка" этот вход. К сожалению, нет символа EOF - когда вы нажимаете на аккорд CTRL - D, tty отправляет сигнал приложению чтения, который завершил входной поток, возвращая значение часового, чтобы заставить его выйти.
Чтобы предотвратить использование этого символа в качестве дополнительного ввода, он должен быть особым символом (например, что-то вне допустимого диапазона, например -1). Когда терминал обнаруживает такой символ, он буферизует все его символы, так что вход пуст, что в свою очередь заставляет вашу программу читать нулевые байты (конец файла).
У вас может возникнуть проблема, поскольку команда read
выходит при приеме eof
, поэтому ваш сценарий, вероятно, заканчивается, прежде чем перейти к вашему условному. Это имеет побочный эффект от выхода из сценария, но, вероятно, не так, как вы хотели.
Try:
#!/usr/bin/env ksh
# unmap so we can control the behavior
stty eof ^D
while true; do
read cmd
echo $cmd
# are we out of input? let's get a taco
if [ ! -n "$cmd" ]; then
echo 'taco time'
fi
done
Когда вы получите другие сигналы (например,^C) общая форма:
ловушки [команда] [сигналы поймать]
Просто используйте while read
:
while read cmd; do
echo $cmd
done
Да, спасибо. Оно работает. Но как я могу использовать сравнение? –
Зачем вам сравнивать? – pynexj
для личной культуры и повышения моих навыков. Может быть, я должен буду сделать перерыв, когда я нажимаю ctrl + something –
'[! -n "$ cmd"] 'не будет работать, если нажать ENTER, не вводя никаких символов. – pynexj