Est-ce que `sl` montre toujours le directory actuel?

Pour ceux qui sont hors de la boucle, sl est un outil de command line humoristique qui est destiné à faire trébucher les gens s'ils utilisent le type ls . Lorsqu'il est appelé, il imprime une locomotive à vapeur. Par exemple:

  ( ) (@@) ( ) (@) () @@ O @ O @ O (@@@) ( ) (@@@@) ( ) ==== ________ ___________ _D _| |_______/ \__I_I_____===__|_________| |(_)--- | H\________/ | | =|___ ___| _________________ / | | H | | | | ||_| |_|| _| \_____A | | | H |__--------------------| [___] | =| | | ________|___H__/__|_____/[][]~\_______| | -| | |/ | |-----------I_____I [][] [] D |=======|____|________________________|_ __/ =| o |=-O=====O=====O=====O \ ____Y___________|__|__________________________|_ |/-=|___|= || || || |_____/~\___/ |_D__D__D_| |_D__D__D_| \_/ \__/ \__/ \__/ \__/ \_/ \_/ \_/ \_/ \_/ 

Cependant, dans la page de manuel de sl , il indique le bogue suivant:

 BUGS It rarely shows contents of current directory. 

Donc, la question rest, y a-t-il des conditions dans lesquelles sl montre réellement le directory courant?

Pour autant que je sache, la seule condition dans laquelle sl montre le directory courant est quand vous le tapez comme ls .

Voici un patch pour corriger ce bug 🙂

 diff --git a/sl.cb/sl.c index 2eeceb3..f2213ad 100644 --- a/sl.c +++ b/sl.c @@ -37,6 +37,7 @@ #include <curses.h> #include <signal.h> #include <unistd.h> +#include <stdlib.h> #include "sl.h" int ACCIDENT = 0; @@ -71,6 +72,13 @@ void option(char *str) int main(int argc, char *argv[]) { int x, i; + + srand(time(NULL)); + if(rand() % 100 < 10) + { + /* 10% chance of directory listing :) */ + execv("/bin/ls", argv); + } for (i = 1; i < argc; ++i) { if (*argv[i] == '-') { 
  • Lemme: sl imprime une locomotive à vapeur
  • Lemme: Les noms de files valides ne peuvent pas contenir de barres obliques (bien que les paths puissent le faire)
  • Lemme: La locomotive à vapeur contient des barres obliques:

     $ touch ' ( ) (@@) ( ) (@) () @@ O @ O @ O > (@@@) > ( ) > (@@@@) > > ( ) > ==== ________ ___________ > _D _| |_______/ \__I_I_____===__|_________| > |(_)--- | H\________/ | | =|___ ___| _________________ > / | | H | | | | ||_| |_|| _| \_____A > | | | H |__--------------------| [___] | =| | > | ________|___H__/__|_____/[][]~\_______| | -| | > |/ | |-----------I_____I [][] [] D |=======|____|________________________|_ > __/ =| o |=-O=====O=====O=====O \ ____Y___________|__|__________________________|_ > |/-=|___|= || || || |_____/~\___/ |_D__D__D_| |_D__D__D_| > \_/ \__/ \__/ \__/ \__/ \_/ \_/ \_/ \_/ \_/' touch: cannot touch '[...]': No such file or directory 

Conclusion: sl ne montre jamais le directory courant. QED.

Vous pouvez vérifier le code source ici – https://github.com/mtoyoda/sl , hélas il n'y a pas d'autres options que celles documentées et malheureusement rien qui va réellement imprimer les noms des files.

Donc, il semble que la réponse de @ sfyn soit la bonne.

Notez que la réponse de I0b0 est seulement une preuve que sl ne montrera jamais tout et seulement la list de directorys courante. Cependant, il existe des circonstances dans lesquelles sl affichera la list de directorys courante avec des informations supplémentaires.

Par exemple, dans un directory vide:

 $ touch ' ( ) (@@) ( ) (@) () @@ O @ O @ O' $ touch ' (@@@)' $ touch ' ( )' $ touch ' (@@@@)' $ touch ' ( )' $ sl 

sera sur les six premières lignes la list du contenu du directory, et sur les 10 lignes restantes embellira commodément cette list avec une image d'un train (sans fumée).

Je sais que Lego Stormtroopr a enregistré un ticket afin que le problème critique puisse être résolu. Qui sait combien de time cela pourrait prendre pour qu'un correctif soit déployé?

En tant que tel, j'ai fourni une solution de contournement afin que l'impact dû à la grave question soit minimisé. Vous pouvez créer une fonction shell sl qui exécuterait sl :

 sl() { ((RANDOM%42)) && command sl || ls; } 

Maintenant, invoquer sl , sporadiquement, listra le contenu du directory.

Si vous l'aliasez sur ls , il va imprimer le directory courant – en fait, une fois que j'ai arrêté de rire à la locomotive à vapeur, j'ai ajouté cela à ma list d'alias.

Vous pouvez toujours revoir son code source pour vous-même, et vous verrez que, sous aucune condition, il n'effectue jamais la command ls ni les directorys d'affichage.

https://github.com/mtoyoda/sl

La source est plutôt simple en fait. Même si vous n'êtes "pas un codeur", vous devriez toujours être en mesure de comprendre la plupart d'entre eux.

Je crois que le "bug" que vous avez posté ci-dessus est vraiment juste en plaisantant (et de provoquer la discussion comme ça lol)

Oui, sl agira comme ls si vous configurez l'alias approprié dans bash ou quel que soit le shell que vous utilisez!

J'ai en fait plusieurs alias pour ls y compris

 alias ls='ls -FG' alias ll='ls -lFG' 

alors merci pour la suggestion – je vais append

 alias sl='ls -FG' 

(Pas que je me souvienne jamais de taper sl mais alors j'ai tendance à nous ll ou lh !)