Конвейерная обработка команд cat и ls

Я новичок в Linux . Я изучал команду cat, когда попробовал это.

harish@harish-Lenovo-G50-45:~$ cat file
Videos/Arrow/Season*
harish@harish-Lenovo-G50-45:~$ cat file | ls -l

Команда отображает содержимое текущей папки вместо папки, указанной в файле. Но когда я сделал это

harish@harish-Lenovo-G50-45:~$ cat file
Videos/Arrow/Season*
harish@harish-Lenovo-G50-45:~$ ls -l $(cat file) 

Содержимое ожидаемой папки отображается правильно. Почему я не могу использовать конвейер в этом случае?

1 ответ

Решение

В первом примере вы передаете вывод cat file на вход ls -l, поскольку ls -l не принимает никаких входных данных, ничего не делает в отношении вывода cat file, Однако во втором примере вы используете $(cat file) который ставит вывод cat file вместо аргумента, переданного ls -lи на этот раз ls -l имеет текст внутри file в правильном месте, чтобы сделать что-то с этим. Проблема здесь в том, чтобы заметить разницу между стандартным вводом программы и аргументами программы. Стандартный ввод - это то, что у вас есть, когда вы звоните scanf в С, например; и аргументы, что вы получаете в argv указатель передан в качестве параметра основной процедуре.

Другие вопросы по тегам