Так я учусь о трубах в Баш и я нашел это содержательное описание:Труба printf для ls в Bash?
UNIX-труба соединяет STDOUT (стандартный вывод) файловый дескриптор первого процесса в STDIN (стандартный ввод) из второй. То, что происходит , заключается в том, что, когда первый процесс записывает в его STDOUT, вывод может быть немедленно прочитан (из STDIN) вторым процессом.
Учитывая это понимание, давайте подключить STDOUT из printf
к STDIN из ls
. Для простоты напечатайте родительский каталог (printf ..
).
~/Desktop/pipes$ mkdir sub
~/Desktop/pipes$ ls
sub
~/Desktop/pipes$ cd sub
(no files)
~/Desktop/pipes/sub$ printf .. | ls
(no files)
~/Desktop/pipes/sub$
Я хочу делать: ls ..
но мне кажется, что все, что я получаю ls
. Почему это так? Как я могу установить ls
родительский каталог с помощью труб? Я неправильно понимаю трубы?
'ls' не читается со стандартного ввода. Итак, 'ls ..' - это способ получить то, что вы хотите здесь. 'man ls' - ваш друг. – codeforester
Так это просто свойство 'ls'? Является ли мое понимание труб в противном случае правильным? Является ли 'ls ..' не принимать аргумент' ..' от STDIN? –
Вам нужно использовать 'xargs' с' ls' @KennethWorden – Inian