Расширяя решение Смита Джона , это дает хороший псевдоним в вашем.bash_profile
:
alias MyPath='echo -e ${PATH//:/\\n}'
Если вы исследуете статус выхода -этого конвейера, вы заметите, что read
возвращает 1:
$ echo -n "Hello" | read
$ echo $?
1
Он возвращает 1, так как обнаружил конец -из условия -файла и, следовательно, не смог прочитать больше данных. Входной поток из echo
был закрыт, потому что echo
завершил свою задачу и завершился, закрыв эту сторону канала.
Данные, считанные до закрытия входного потока из echo
, по-прежнему будут доступны в переменной REPLY
:
$ echo -n "Hello" | { read; echo "$REPLY"; }
Hello
Короче говоря, read
не ожидает дальнейшего ввода, поскольку он заметил, что входной поток был закрыт.
Также (тангенциально )связаны:Что подразумевается под "держать трубу открытой"?
Вы можете встретить подобные петли:
while read variable || [ -n "$variable" ]; do
# something with "$variable"
done
Это позволяет читать ввод, который не может быть должным образом завершен конечным символом новой строки. Без теста -n
и без последнего символа новой строки в данных последняя (не завершенная -строка )в противном случае будет пропущена.
Утилита read
, используемая в этом цикле, работает как тест. Если входной поток, к которому подключен цикл, закроет (, read
читает за конец файла ), read
вернет не -нулевой статус выхода -, и цикл будет прекратить. С тестом -n
он выполняет одну дополнительную итерацию , но эта дополнительная итерация просто подтвердит, что да, данных для чтения больше нет, и теперь значение $variable
также пусто.