Una vez en un chat de telegramas de la comunidad de
sangre sangrienta de San Petersburgo SPbLUG lancé un rompecabezas divertido:
Enumere los archivos en su directorio de inicio con tantos métodos como sea posible, sin usar ls o sus alias (1 método - 1 punto)
La misma tarea más tarde voló
a otro chat , y esto es lo que surgió:
1. eco e impresión
for i in ~/* ~/.* ; do echo $i ; done
Se devolverá exactamente lo mismo al reemplazar el comando echo con print.
De hecho, puede prescindir de un ciclo, resultará no tan bonito, pero se ajusta a la condición de la tarea.
echo ~/* ~/.*
2. árbol
Una forma más obvia es usar el árbol, que es prácticamente ls si elige las teclas correctas.
tree -aiL 1 ~
3. encontrar
También una solución más que obvia.
find ~ -maxdepth 1 -mindepth 1
4. du
Sí, la gente no se olvidó de du.
du -ad 1 ~
5. alquitrán
Pasamos a
los procedimientos de agua con perversiones sutiles.
tar -cvf /dev/null --no-recursion ~/* ~/.* 2>null
6. 7. Perl y Python
Dado que, en la condición del problema, olvidé poner una restricción a los intérpretes, que en Linux moderno generalmente están listos para usar en el sistema, los cocineros y criadores de serpientes no podían mantenerse alejados:
Perl:
perl -e 'use feature "say"; opendir my $dh, "." or die "Could not open . for reading: $!\n"; while (my $thing = readdir $dh) { say $thing; };'
Python:
echo -e "import os\nfor i in os.listdir(os.getenv('HOME')): print(i)" | python
Fuera de competencia
Incluso dieron el código fuente de C a la montaña, pero a pesar de que el compilador está presente en casi todas partes, a excepción de las distribuciones integradas, lo consideré un desastre completamente completo. ;-)
#include <stdio.h> #include <stdlib.h> #include <dirent.h> #define HOME getenv("HOME") int main(int argc, char const *argv[]) { struct dirent *dp; DIR *dir = opendir(HOME); while ((dp = readdir(dir)) != NULL) printf("%s\n", dp->d_name); closedir(dir); return 0; }
PS
Probablemente, en algún lugar de coreutils / findutils, los participantes de la diversión se perdieron algo. Hubo intentos fallidos de usar menos / más, pero tal vez la gente de Habrovsk también tuvo ideas sobre el uso no estándar de las utilidades estándar.
Upd. 1
Gracias habr! Comentarios, esto es solo una especie de vacaciones! Y en base a sus motivos, estoy preparando una nueva publicación. Mantente en contacto!
Upd. 2
Como prometí, la segunda parte del
Ballet Marlezon .