Печати на терминал непосредственно:Почему Ls дают различные результаты при конвейере
$ ls
a.out avg.c avg.h
Труба для cat
$ ls | cat
a.out
avg.c
avg.h
Почему ls
дает различный выход, основанный на месте назначения?
Печати на терминал непосредственно:Почему Ls дают различные результаты при конвейере
$ ls
a.out avg.c avg.h
Труба для cat
$ ls | cat
a.out
avg.c
avg.h
Почему ls
дает различный выход, основанный на месте назначения?
ls
может фактически определить, выводится ли он на терминал или файл (с вызовом библиотеки isatty
). Если он обнаружит консоль, она попытается сделать ее более компактной для удобства просмотра.
найти веб-страницу: http://www.ginac.de/~kreckel/fileno – kev
ls
автоматически ведет себя как ls -1
при передаче по трубопроводу.
Это, как правило, то, что вы хотите, когда вы обжигающе ls
к awk
или что-то подобное, так как он будет относиться к выходной ls
на основе линии построчно.
Чтобы отменить это поведение по умолчанию, вы можете использовать ls -C | cat
.
Кроме того, он не использует цвета при подаче питания. Поэтому, если вам нужны яркие коды эвакуации, вы можете использовать 'ls -C --color = yes | cat'. Это может быть полезно с помощью 'ls -C --color = yes | меньше -R' –
Так, чтобы каждая строка была только одной записью, позволяющей команде выводиться на выход, чтобы работать, как и следовало ожидать. Например (учитывая ваш ls
выход), следующий, вероятно, не то, что вы хотите:
$ ls | sort -r
a.out avg.c avg.h
Но поскольку sort
не знал, что было больше, чем один элемент в каждой строке, он не мог ничего сделать. Сравните это с тем, что на самом деле происходит:
$ ls | sort -r
avg.h
avg.c
a.out
Вы можете достичь (неожиданную) первое поведение, передав -C
в ls
.
FWIW, я считаю это поведение сломанным. Заслуживаемая временем традиция легко объединять огромные конвейеры команд намного сложнее, когда указанные команды меняют свой вывод, когда его отправляют в разные места. – paxdiablo