Конвейерная обработка команд 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
указатель передан в качестве параметра основной процедуре.