Sl, mevcut dizini hiç gösteriyor mu?


106

Döngünün dışında kalanlar için, slinsanları yanlış yazmaları durumunda yukarı çekmek için yapılan esprili bir komut satırı aracıdır ls. Çağrıldığında bir Steam Lokomotifi yazdırır. Örneğin:

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

Ancak, man sayfasında sl, aşağıdaki hatayı belirtir:

BUGS
        It rarely shows contents of current directory.

Yani, soru kalır bazı şartlar vardır, altında slaslında yok o dizini göstermek?


45
1 çok kullanışlı beni tanıştırmak için fayda Ben yıllardır habersiz olmuştu.
devnull

3
@slm Bunu iddia ettik, bu yüzden bu kritik konuyu ele alan bir hatayı ortaya koydum: # 9

44
Dizinin içeriğini nadiren gösterdiğini söylüyor . Öyleyse, sanki eğer dosyalarınız varsa | | | H |__--------------------| [___] | =| |, sl onları gösterir.
Bay Lister,

3
Talep inc çekin: github.com/mtoyoda/sl/pull/11
Asteri

7
14 yıldır Unix / Linux sysadmin'im ve bu inanılmaz aracı hiç duymadım. Öğrenecek ne kadar olması şaşırtıcı.
Michael Martinez

Yanıtlar:


183

Bildiğim kadarıyla sl, geçerli dizini gösteren tek koşul , onu yanlış yazdığınız zamandır ls.


8
+1 Mizahi, ancak daha güvenilir bir cevap bekliyorum.

37
@LegoStormtroopr - belki de LegoEmperor'un tartılmasını bekliyorsun?
mikeserv

42
  • Lemma: slbir buharlı lokomotif yazdırır
  • Lemma: Geçerli dosya adları eğik çizgi içeremez ( yollar olabilir)
  • Lemma: Buharlı lokomotif öne eğik çizgiler içeriyor:

    $ 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
    

Sonuç: slmevcut dizini asla göstermez. QED.


6
/Unix dosya isimlerinde izin verilmeyen birkaç dosya içeriyor .
mtak

2
Eğer bir yaptıysak mkdir -p "$(dirname "$(sl)")"yapabileceğin touch "$(sl)". Tabii ki, OS / FS'nizin sınırlarını test ediyor olabilirsiniz. Ve bunu temizlerken eğlenin.
Kevin

3
@MrLister Şüphesiz bu, ancak dosya sisteminde bu tür dosyaların oluşturulmasına izin verecek bir hata olması durumunda mümkün olabilirdi. Referansın var mı?
l0b0

1
@ VolkerSiegel: Pek değil. Windows her ikisini de destekler /ve \aynı şeyi ifade eder.
Konrad Borowski

3
H(Örneğin) adında bir dosyanız varsa , o slzaman gerçekten gösterir. Sadece bir sürü başka şey gösterir. :-)
ShreevatsaR

38

İşte bu hatayı düzeltmek için bir yama :)

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] == '-') {

5
Aman Tanrım. Efendim siz bir alim ve dahisiniz.


1
Biliyor musun, aslında bunun nasıl yapılacağı hakkında hiçbir fikrim yok? Başkalarının yazılımı için web tabanlı bir indirme portalı dışında kendimi github kullanmıyorum. İsterseniz bunu yapabilirsiniz. Yukarıdaki koddaki tüm telif haklarını resmen reddeder ve kamuya açık olarak koyarım.
Ionoclast Brigham,

+ 1, ama bu tam olarak% 10 olduğunu - rand() "0 ve RAND_MAX aralığında, bir sözde-rasgele bir tam sayısı döndürür" kitaplığı bağlı olduğu, ancak 100 ile bölünebilir olmayabilir
l0b0

1
Teknik olarak execx () işlevleri geri dönebilir. Kimden man 3 exec: "exec () işlevlerinden herhangi biri geri dönerse, bir hata oluşacak. Dönüş değeri -1'dir ve errno global değişkeni hatayı belirtecek şekilde ayarlanacaktır."
Ionoclast Brigham

24

Burada kaynak kodunu kontrol edebilirsiniz - https://github.com/mtoyoda/sl , ne yazık ki belgelenenlerin dışında başka bir seçenek yok ve ne yazık ki dosya adlarını basacak hiçbir şey yok.

Yani @ sfyn'in cevabı doğru cevap gibi gözüküyor .



5
@LegoStormtroopr, gerçekten kritik bir konudur.
Graeme

5
Muhtemelen Heartbleed'den bu yana en büyük böcek!

12

I0b0'ın cevabının sadece sltüm ve sadece geçerli dizin listesini göstermeyecek bir kanıt olduğunu unutmayın . Bununla birlikte, slmevcut dizin listesini ek 'bilgiler' ile birlikte göstereceği durumlar vardır .

Örneğin, boş bir dizinde:

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

ilk altı satırda dizinin içeriği listelenecek ve kalan 10 satırda bu listeyi bir tren görüntüsü (dumansız) ile rahatça süsleyeceksiniz.


3
Veya geçerli dizin boş bir küme olabilir. Bu durumda, tüm (olmayan) dosyalar bir trenin resmi ile birlikte görüntülenir. :-)
Kevin Seifert

6

Bunu biliyorum Lego Stormtroopr olan bir bilet açmış kritik konu ele alınması böylece. Bir düzeltmenin yapılmasının ne kadar zaman alacağını kim bilir?

Bu nedenle, ciddi sorunlardan kaynaklanan etkilerin en aza indirilmesi için bir çözüm önerdim. Bir kabuk işlevi oluşturabilir slyürütülür sl:

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

Şimdi çağırmak sl, ara sıra, dizin içeriğini listeler.


2

Eğer takma iseniz ls, şu anki dizini basacaktır - aslında, buharlı motor lokomotifinde gülmeyi kestiğimde, bunu takma adları listeme ekledim.


1

Her zaman kaynak kodunu kendiniz inceleyebilir ve hiçbir koşulda gerçek lskomutu yerine getirmediğini ya da dizinleri göstermediğini görürsünüz .

https://github.com/mtoyoda/sl

Kaynak aslında oldukça basittir. “Kodlayıcı olmasanız” bile, çoğunu hala anlayabilmelisiniz.

Ben yukarıda yayınlanan "hata" gerçekten sadece jest olduğunu düşünüyorum (ve bu lol gibi tartışmalara neden)


1

Evet, sluygun takma adı bash veya kullandığınız kabuk olarak ayarlarsanız, tıpkı ls gibi davranırsınız!

Aslında ls için birkaç takma isme sahibim.

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

öneri için çok teşekkürler - ekleyeceğim

alias sl='ls -FG'

(Yazmayı hiç hatırlamadığımdan eminim slama sonra bize llya da eğilimindeyim lh!)


-1

Benim yaptığım gibi yapabilirsin ...

mv / usr / oyunlar / sl / usr / oyunlar / sl-OLD

mv / usr / oyunlar / LS / usr / oyunlar / LS-OLD

nano / usr / oyunlar / sl

Aşağıdakileri yapıştırın:

#! / Bin / bash

echo "SİZİ TIKLAYIN" sl "'ls' INSTEAD!"

/ Usr / oyunlar / sl-eski

echo "Sanırım yine de listeleyebilirim ..."

/ Bin / ls

Çıkmak için CTRL + X, kaydetmek için Y düğmesine basın.

nano / usr / oyunlar / LS

Aşağıdakileri yapıştırın:

#! / Bin / bash

echo "SİZE '' LİSE '' YAZDIN! '

/ Usr / oyunlar / sl-eski

echo "Sanırım yine de listeleyebilirim ..."

/ Bin / ls

Çıkmak için CTRL + X, kaydetmek için Y düğmesine basın.

Not: Bunu canlandırmak için bekliyoruz .. "sl linux komutunu" aramak hala bu konuyu gündeme getiriyor, bu yüzden dosyaları listeleme biçimim konusunda gerçek bir cevap vereceğimi düşündüm ...

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.