impresión directamente al terminal:¿Por qué ls dar salida diferente al hilo
$ ls
a.out avg.c avg.h
tuberías a cat
$ ls | cat
a.out
avg.c
avg.h
¿Por qué ls
dar una salida diferente basado en destino?
impresión directamente al terminal:¿Por qué ls dar salida diferente al hilo
$ ls
a.out avg.c avg.h
tuberías a cat
$ ls | cat
a.out
avg.c
avg.h
¿Por qué ls
dar una salida diferente basado en destino?
ls
realmente puede determinar si se está enviando a un terminal o un archivo (con la llamada a la biblioteca isatty
). Si detecta una consola, intentará hacerla más compacta para facilitar la visualización.
encontrar una página web: http://www.ginac.de/~kreckel/fileno – kev
ls
se comporta de forma automática como ls -1
al hilo.
Esto es por lo general lo que quiere cuando se está de tuberías de ls
a awk
o algo por el estilo, ya que tratará la salida del ls
sobre una base de línea por línea.
Para anular este comportamiento predeterminado, puede utilizar ls -C | cat
.
Además, no usa colores cuando se canaliza. Entonces, si quiere los códigos de escape coloridos, puede usar 'ls -C --color = yes | gato'. Puede ser útil con 'ls -C --color = yes | menos -R' –
para que cada línea es sólo una entrada, permitiendo que el comando de la salida se conduce a trabajar como probablemente sería de esperar. Por ejemplo (dada su salida ls
), la siguiente probablemente no sería lo que quiere:
$ ls | sort -r
a.out avg.c avg.h
Pero debido sort
no sabía que había más de un elemento por línea, que no podía hacer nada. Compare esto con lo que realmente ocurre:
$ ls | sort -r
avg.h
avg.c
a.out
Puede lograr el (inesperado) en primer lugar el comportamiento al pasar a -C
ls
.
Fwiw, considero que este comportamiento erróneo. La larga tradición de ser fácilmente capaz de hilvanar enormes tuberías de comandos se hace mucho más difícil cuando dichos comandos cambian su ouput cuando es enviado a diferentes lugares. – paxdiablo