если Вы используете zsh:
Вы не должны вводить cd
, просто введите путь к каталогу (/foo/bar/baz
равняется cd /foo/bar/baz
)
требует auto_cd
опция, которая будет установлена
Tab
ключ (/u/sh/pi
расширяется до /usr/share/pixmaps
; работы для имен файлов также)Можно перенаправить все, что Вы хотите echo
но это ничего не сделает с ним. echo
не читает его стандарт ввел. Все, что это делает, записать в стандартный вывод его аргументы, разделенные пробелом и завершенные символом новой строки (и с некоторыми echo
реализации с некоторыми escape-последовательностями в них расширенный и/или аргументы, запускающиеся с -
возможно рассматриваемый как опции).
Если Вы хотите echo
для отображения содержания файла необходимо передать то содержание как аргумент echo
. Что-то как:
echo "$(cat my_file.txt)"
Отметьте это $(...)
разделяет запаздывающие символы новой строки от вывода этого cat
команда, и echo
добавляет тот назад.
Также отметьте это кроме с zsh
, Вы не можете передать символы NUL в аргументах команды, так, чтобы выше обычно не работал с двоичными файлами. yash
также удалит байты, которые не являются частью допустимых символов.
Если причина желания сделать, который является, потому что Вы хотите echo
расшириться \n
, \b
, \0351
... escape-последовательности в файле (как совместимый UNIX echo
реализации делают, но не все), затем Вы использовали бы printf
вместо этого:
printf '%b\n' "$(cat my_file.txt)"
Вопреки echo
, тот является портативным и не будет иметь проблем, если содержание файла запускается с -
.
Как альтернатива $(cat file)
, с ksh
, zsh
и bash
, можно также сделать: $(<file)
. Это - специальный оператор посредством чего оболочка в противоположность cat
читает содержание файла для составления расширения. Это все еще разделяет запаздывающие новые строки и дроссели на байтах NUL кроме zsh
. В bash
, это все еще разветвляет дополнительный процесс. Также обратите внимание, что одно различие - то, что Вы не получите ошибки при попытке считать файл каталога типа тот путь. Кроме того, в то время как $(< file)
является особенным, $(< file; other command)
не (в zsh
, если не эмулируя другую оболочку, которая все еще развернула бы содержание file
, путем выполнения неявного $READNULLCMD
команда (обычно пейджер)).
Простой ответ: Вы не можете. echo
(будьте этим, окружают встроенный или регулярный двоичный файл), не обрабатывает его стандартный вход - это - один путь только.
Как было сказано,
Если вы хотите, чтобы
echo
отображал содержимое файла, вы должны передать это содержимое в качестве аргумента вecho
Например, вы можно сделать это с помощью xargs
(учитывая, что вам нужно включить интерпретацию экранирований обратной косой черты ):
$ cat my_file.txt | xargs echo -e
Или просто то, что вы просили (без интерпретации escape-последовательностей последовательностей ):
$ cat my_file.txt | xargs echo
В bash также должно работать следующее:
echo `cat my_file.txt`
Часть обратных кавычек заменяется выводом этой команды, т.е. в данном случае заменяется содержимое файла.
Добавляя к другим ответам, вы также можете попробовать перенаправление ввода вместо cat
echo $(<my_file.txt)
или
echo `<my_file.txt`
$()
и `` выполнить то же самое, они запускаются команды внутри их области действия и передают вывод в оболочку, как если бы он был введен пользователем. Единственная разница между ними состоит в том, что $() может быть рекурсивным, а `` не может быть рекурсивным.
cat
и просто считайте оболочку это в непосредственно:echo "$(<my_file.txt)"
. – Kevin 04.02.2013, 16:52$(<filename)
. огромное спасибо – Dimitre Radoulov 04.02.2013, 17:25