Удаление оператора перенаправления не изменяет выход. Зачем?
Я видел это использование перенаправления где-то и думал, что это опечатка:
grep root < /etc/passwd
Но после запуска я увидел, что он дает тот же результат с grep root /etc/passwd
:
$ grep root < /etc/passwd root:x:0:0:root:/root:/bin/bash $ grep root /etc/passwd root:x:0:0:root:/root:/bin/bash
То же самое происходит с
cat < /etc/passwd cat /etc/passwd
Однако при использовании с ls
перенаправление игнорируется:
ls < /etc/passwd
не выводит один и тот же вывод с
ls /etc/passwd
Что происходит?
One Solution collect form web for “Удаление оператора перенаправления не изменяет выход. Зачем?”
Многие утилиты, которые работают с файлами, будут принимать stdin (стандартный ввод) в виде потокового ввода или принимать имя файла в качестве параметра. Ваши < file
примеры < file
перенаправляют вывод файла в утилиту. Файл был открыт оболочкой и передан вашей утилите через stdin ..
С другой стороны, с cat file
, cat обрабатывает открытие и чтение файла , а перенаправление не участвует.
ls
никогда не читает файл, поэтому он не принимает имя файла в качестве параметра с целью открытия и чтения файла .. (он принимает маски имен файлов) … Для ls
действие перенаправления, по сути, игнорируется, потому что ничего в этом процессе не читает файл с открытым оболочкой …
Чтобы определить, как работает какая-либо утилита, просто введите man utility-name
в терминале … man – сокращение от ручного … например. man cat
представляет вам руководство для кошек