Я слышал о «бесполезном использовании кошки» и нашел некоторые предложения, но следующие ничего не выводят в моей оболочке bash.
< filename
Использование кошки работает, как и ожидалось.
cat filename
Я использую Fedora Core 18 и GNU bash, версия 4.2.45 (1).
РЕДАКТИРОВАТЬ: Использование его перед трубой тоже не работает.
< filename | grep pattern
Принимая во внимание, что использование кошки работает как ожидалось.
cat filename | grep pattern
EDIT2: чтобы уточнить, я знаю, что я могу использовать это
grep pattern < filename
но я прочитал здесь /programming/11710552/useless-use-of-cat, что я также могу использовать его перед командой. Это не работает перед командой, хотя.
bash
shell
io-redirection
cat
ошибка
источник
источник
Ответы:
Символ less than и (
<
) открывает файл и присоединяет его к стандартному дескриптору устройства ввода некоторого приложения / программы. Но вы не дали оболочке ни одного приложения для присоединения ввода.пример
Эти 2 примера, по сути, делают то же самое, но получают свой вклад в 2 слегка отличающихся способа.
открывает файл
открывает STDIN
Заглядывать за занавес
Вы можете использовать,
strace
чтобы увидеть, что происходит.Когда мы читаем из файла
Когда мы читаем из STDIN (идентифицируется как 0)
В первом примере мы видим, что
cat
открыли файл и прочитали из негоblah.txt
,. Во втором мы видим, чтоcat
содержимое файла считываетсяblah.txt
через дескриптор файла STDIN, идентифицируемый как дескриптор номер 0.источник
cat
как правило, неправильно понимается и используется, когда в этом нет необходимости.< filename command
.Классическое бесполезное использование
cat
- это когда вы используете его для ввода программ, которые способны открывать файлы напрямую. Например:Плохо
Хорошо
Также хорошо (
<file
может быть на любой стороне команды)источник
cat
.cat
включают (1)cat file
(с выходом на экран / терминал, хотя, если файл больше , чем экран высок, вы можете предпочесть использоватьmore
илиless
или что - то в этом роде), (2)cat file1 file2 file3 > all_data
( именно то , чтоcat
предназначено), (3)cat f1 f2 f3 | tr …
(или передать в любую другую программу, в которую вы не хотите передавать файлы напрямую, напримерwc
(например, если вы хотите видеть только общий итог) илиgrep
(например, если у вас есть старая версия, которая не поддерживает-h
, т. е.,--no-filename
)),… (продолжение)cat -n file | sort … -k1 | sed 's/^ *[0-9]*\t//'
, (5)sudo cat file600 | untrusted_program
(т. Е. Вы (ваш UID) не можете прочитать файл, и вы не хотите запускать программу от имени пользователя root или даже с каким-либо полу привилегированным UID). Также, ( e ) (то есть число от 2 до 3)program_that_generates_html | cat static_html_header - static_html_footer
(которое вы, вероятно, захотите перенаправить в файл или канал).UUOC находится в:
или
Там
some-cmd
читает содержимоеsomefile
из канала, поcat
которому он сам читаетsomefile
.some-cmd
может читать напрямую изsomefile
(после того, как оболочка открыла его для него на stdin), нет необходимостиcat
:или
(перенаправления могут появляться в любом месте простой командной строки).
источник