команда bash генерирует странное поведение - PullRequest
1 голос
/ 11 июня 2019

Я изучаю bash, и мне пришлось набрать var = "$(cat)" в bash, странно то, что он входит, и приглашение bash исчезло, пока я не использую ctrl-c .

, что такое командаvar = "$(cat)"?

bash-3.2$ var = "$(cat)"

^C
bash-3.2$

1 Ответ

1 голос
/ 11 июня 2019

Запись 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, чтобы проверить, работает ли присвоение переменной должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...