Zeigt `sl` jemals das aktuelle Verzeichnis an?

106

Für diejenigen, die nicht in der Schleife sind, slist es ein humorvolles Kommandozeilen-Tool, das dazu gedacht ist, Leute zu stolpern, wenn sie sich vertippen ls. Beim Aufrufen wird eine Dampflokomotive gedruckt. Zum Beispiel:

                          (  ) (@@) ( )  (@)  ()    @@    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_|
     \_/      \__/  \__/  \__/  \__/      \_/               \_/   \_/    \_/   \_/

In der Manpage für slwird jedoch der folgende Fehler angezeigt:

BUGS
        It rarely shows contents of current directory.

Die Frage bleibt also, gibt es einige Bedingungen, unter denen das aktuelle Verzeichnis sltatsächlich angezeigt wird ?

Braiam
quelle
45
+1 für die Einführung in ein sehr nützliches Dienstprogramm, von dem ich jahrzehntelang nichts gewusst hatte.
Devnull
3
@slm Wir haben das festgestellt, also habe ich einen Fehler behoben, der dieses kritische Problem
44
Es heißt, es zeigt selten den Inhalt des Verzeichnisses. Ich nehme also an, dass sie bedeuten, wenn Sie Dateien haben, wie sie | | | H |__--------------------| [___] | =| |sl zeigt.
Mr Lister
3
Pull Request inc: github.com/mtoyoda/sl/pull/11
Asteri
7
Ich bin seit 14 Jahren ein Unix / Linux-Systemadministrator und hatte noch nie von diesem unglaublichen Tool gehört. Es ist erstaunlich, wie viel es zu lernen gibt.
Michael Martinez

Antworten:

183

Soweit ich weiß, ist die einzige Bedingung, unter der sldas aktuelle Verzeichnis angezeigt wird, wenn Sie es als falsch eingeben ls.

sfyn
quelle
8
+1 Humorvoll, aber ich hoffe auf eine verbindlichere Antwort.
37
@LegoStormtroopr - vielleicht warten Sie darauf, dass LegoEmperor sich wiegt?
mikeserv
42
  • Lemma: sldruckt eine Dampflok
  • Lemma: Gültige Dateinamen dürfen keine Schrägstriche enthalten ( Pfade jedoch)
  • Lemma: Die Dampflokomotive enthält Schrägstriche:

    $ 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
    

Fazit: slZeigt nie das aktuelle Verzeichnis an. QED.

l0b0
quelle
6
Es enthält mehrere /Dateien, die in Unix-Dateinamen nicht zulässig sind.
MTAK
2
Wenn Sie ein taten mkdir -p "$(dirname "$(sl)")", konnten Sie tun touch "$(sl)". Natürlich testen Sie möglicherweise die Grenzen Ihres OS / FS. Und viel Spaß beim Aufräumen.
Kevin
3
@MrLister Sicherlich wäre das nur möglich, wenn das Dateisystem auch einen Fehler enthalten würde, mit dem solche Dateien erstellt werden könnten. Haben Sie eine Referenz?
l0b0
1
@ VolkerSiegel: Nicht wirklich. Windows unterstützt beide /und \und sie bedeuten dasselbe.
Konrad Borowski
3
Wenn Sie beispielsweise eine Datei mit dem Namen haben H, wird sldiese tatsächlich angezeigt. Es ist nur so, dass es auch viele andere Dinge zeigt. :-)
ShreevatsaR
38

Hier ist ein Patch, um diesen Fehler zu beheben :)

diff --git a/sl.c b/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] == '-') {
Ionoclast Brigham
quelle
5
Oh Gott. Sie, mein Herr, sind ein Gelehrter und ein Genie.
3
Bitte ... bitte ...
1
Weißt du, ich habe eigentlich keine Ahnung, wie das geht? Ich benutze github nur als webbasiertes Download-Portal für die Software anderer. Sie können das tun, wenn Sie möchten. Ich lehne offiziell alle Urheberrechte für den oben genannten Code ab und stelle ihn gemeinfrei zur Verfügung.
Ionoclast Brigham
+1, aber das sind nicht genau 10% - rand() "Gibt eine pseudozufällige Integralzahl im Bereich zwischen 0 und RAND_MAX zurück", die bibliotheksabhängig ist, aber möglicherweise nicht durch 100 teilbar ist.
l0b0
1
Technisch gesehen können execx () -Funktionen zurückkehren. Von man 3 exec: "Wenn eine der exec () - Funktionen zurückgegeben wird, ist ein Fehler aufgetreten. Der Rückgabewert ist -1, und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen."
Ionoclast Brigham
24

Sie können den Quellcode hier überprüfen - https://github.com/mtoyoda/sl , leider gibt es keine anderen Optionen als die dokumentierten und leider nichts, das die Namen der Dateien tatsächlich druckt.

Es sieht also so aus, als ob @ sfyns Antwort die richtige ist.

Graeme
quelle
5
@LegoStormtroopr, in der Tat ein kritisches Problem.
Graeme
5
Möglicherweise der größte Fehler seit Heartbleed!
12

Beachten Sie, dass die Antwort von I0b0 nur ein Beweis ist, slder niemals alle und nur die aktuelle Verzeichnisliste anzeigt . Es gibt jedoch Umstände, unter denen sldie aktuelle Verzeichnisliste zusammen mit zusätzlichen 'Informationen' angezeigt wird.

Zum Beispiel in einem leeren Verzeichnis:

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

In den ersten sechs Zeilen wird der Inhalt des Verzeichnisses aufgelistet, und in den verbleibenden 10 Zeilen wird diese Auflistung bequem mit einem Bild eines Zuges (ohne Rauch) verschönert.

JP
quelle
3
Das aktuelle Verzeichnis kann auch eine leere Gruppe sein. In diesem Fall werden alle (nicht vorhandenen) Dateien zusammen mit einem Bild eines Zuges angezeigt. :-)
Kevin Seifert
6

Ich weiß, dass Lego Stormtroopr ein Ticket protokolliert hat, damit das kritische Problem behoben werden kann. Wer weiß, wie lange es dauern kann, bis ein Update verfügbar ist?

Daher habe ich eine Problemumgehung bereitgestellt, um die Auswirkungen aufgrund des gravierenden Problems zu minimieren. Sie können eine Shell-Funktion erstellen sl, die Folgendes ausführen würde sl:

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

Jetzt sllistet der Aufruf sporadisch den Verzeichnisinhalt auf.

devnull
quelle
2

Wenn Sie einen Alias ​​verwenden ls, wird das aktuelle Verzeichnis gedruckt. Sobald ich aufgehört habe, über die Dampflokomotive zu lachen, habe ich das zu meiner Aliase-Liste hinzugefügt.

bemerkenswert
quelle
1

Sie können den Quellcode jederzeit selbst überprüfen und sehen, dass er unter keinen Umständen den tatsächlichen lsBefehl ausführt oder Verzeichnisse anzeigt.

https://github.com/mtoyoda/sl

Die Quelle ist eigentlich ziemlich einfach. Auch wenn Sie "kein Programmierer" sind, sollten Sie das meiste verstehen können.

Ich glaube, der "Bug", den Sie oben gepostet haben, ist wirklich nur ein Scherz (und um Diskussionen wie diese zu verursachen, lol)

SnakeDoc
quelle
1

Ja, slverhält sich wie ls, wenn Sie den entsprechenden Alias ​​in bash oder einer anderen von Ihnen verwendeten Shell einrichten!

Ich habe tatsächlich mehrere Alias ​​für ls einschließlich

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

also danke für den vorschlag - werde ich hinzufügen

alias sl='ls -FG'

(Nicht, dass ich mich jemals an das Tippen erinnern würde, slaber dann neige ich zu uns lloder lh!)

David MW Powers
quelle
-1

Das könnte man genauso machen wie ich auch ...

mv / usr / spiele / sl / usr / spiele / sl-OLD

mv / usr / games / ls / usr / games / ls-old

nano / usr / games / sl

Fügen Sie Folgendes ein:

#! / bin / bash

echo "SIE TYPISIERTEN 'sl' STATT 'ls'!"

/ usr / games / sl-old

echo "Schätze, ich kann es trotzdem auflisten ..."

/ bin / ls

Drücken Sie STRG + X zum Verlassen und Y zum Speichern.

nano / usr / games / ls

Fügen Sie Folgendes ein:

#! / bin / bash

echo "DU HAST 'LS' STATT 'ls' TYPISIERT!"

/ usr / games / sl-old

echo "Schätze, ich kann es trotzdem auflisten ..."

/ bin / ls

Drücken Sie STRG + X zum Verlassen und Y zum Speichern.

PS: Gerne können Sie dies wiederbeleben. Wenn Sie nach "sl linux command" suchen, wird dieser Thread immer noch angezeigt. Ich dachte, ich würde eine echte Antwort darauf geben, wie ich die Dateien aufgelistet habe.

Thread_Reviver
quelle