Запись var=$(cat)
означает, что вы пытаетесь сохранить выходные данные подоболочки, которая выполняет команду cat
. Однако выполнение cat
без аргументов эквивалентно cat STDIN
(также как и cat -
), и если вы не завершите поток ввода должным образом, cat
все равно будет читать из STDIN
до тех пор, пока не прервется (именно поэтому вы думаете, что ваш запрос исчез, но на самом деле вы находитесь в подоболочке).
Поскольку вы отправляете сигнал SIGINT
(CTRL+C
) процессу (под), команда и, следовательно, подоболочка выходит с состоянием, отличным от 0 (вы можете проверить состояние выхода, выполнив echo $?
сразу после var=$(cat)
, он должен быть равен 130 для процесса, завершенного SIGINT
). Кроме того, вы можете попытаться записать что-то в STDIN
вышеупомянутой подоболочки и затем отправить CRTL+D
, что при вводе в начале строки на данном терминале означает конец ввода вместо CTRL+C
. Наконец, вы можете набрать echo $var
, чтобы проверить, работает ли присвоение переменной должным образом.