क्या `sl` कभी वर्तमान निर्देशिका दिखाता है?


106

लूप से बाहर निकलने वालों के लिए, slएक विनम्र कमांड लाइन उपकरण है जो लोगों को यात्रा करने के लिए होता है अगर वे गलत व्यवहार करते हैं ls। जब यह एक भाप लोकोमोटिव प्रिंट करता है। उदाहरण के लिए:

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

हालांकि, इसके लिए मैन पेज में sl, यह निम्नलिखित बग बताता है:

BUGS
        It rarely shows contents of current directory.

तो, सवाल बनी हुई है, वहाँ कुछ शर्तें हैं, जिसके तहत slवास्तव में है वर्तमान निर्देशिका दिखाते हैं?


45
मुझे एक बहुत ही उपयोगी उपयोगिता से परिचित कराने के लिए +1 मैं दशकों से अनजान था।
devnull

3
@ एसएलएम हमने यह सुनिश्चित किया है, इसलिए मैंने इस महत्वपूर्ण मुद्दे को संबोधित करते हुए एक बग में रखा है: # 9

44
यह कहता है कि यह शायद ही निर्देशिका की सामग्री को दर्शाता है । इसलिए मुझे लगता है कि अगर आपके पास फाइलें हैं | | | H |__--------------------| [___] | =| |, तो इसका मतलब यह है कि एसएल उन्हें दिखाता है।
मिस्टर लिस्टर

3
पुल अनुरोध inc: github.com/mtoyoda/sl/pull/11
क्षुद्र

7
मैं 14 साल से यूनिक्स / लिनक्स सिसडमिन रहा हूं और इस अविश्वसनीय उपकरण के बारे में कभी नहीं सुना था। यह सीखना कितना आश्चर्यजनक है।
माइकल मार्टिनेज

जवाबों:


183

जहाँ तक मुझे पता है, एक ही शर्त जिसके तहत slवर्तमान निर्देशिका दिखाई देती है, जब आप इसे गलत मानते हैं ls


8
+1 हास्य, लेकिन मैं एक अधिक आधिकारिक उत्तर की उम्मीद कर रहा हूं।

37
@LegoStormtroopr - शायद आप LegoEmiple के लिए इंतजार कर रहे हैं?
15-15

42
  • लेम्मा: slएक स्टीम लोकोमोटिव प्रिंट करता है
  • Lemma: मान्य फ़ाइल नामों में फ़ॉरवर्ड स्लैश नहीं हो सकते (हालाँकि पथ कर सकते हैं)
  • लेम्मा: स्टीम लोकोमोटिव में आगे स्लैश शामिल हैं:

    $ 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
    

निष्कर्ष: slवर्तमान निर्देशिका को कभी नहीं दिखाता है। QED।


6
इसमें कई /'तों शामिल हैं, जिन्हें यूनिक्स फाइलनाम में अनुमति नहीं है।
mtak

2
अगर तुमने किया तो तुम mkdir -p "$(dirname "$(sl)")"कर सकते हो touch "$(sl)"। बेशक, आप अपने OS / FS की सीमाओं का परीक्षण कर रहे होंगे। और मज़ा है कि सफाई।
केविन

3
@Mrister निश्चित रूप से यह तभी संभव होगा जब फाइलसिस्टम में बग भी हो, जिससे ऐसी फाइलें बनाई जा सकें। क्या आपके पास एक संदर्भ है?
l0b0

1
@ वोल्केरसेल: वास्तव में नहीं। विंडोज दोनों का समर्थन करता है /और \, और उनका मतलब एक ही है।
कोनराड बोरोस्की

3
यदि आपके पास एक फ़ाइल है H(उदाहरण के लिए), तो slवास्तव में इसे दिखाता है। यह सिर्फ इतना है कि यह कई अन्य चीजों को भी दर्शाता है। :-)
श्रीवत्सआर

38

यहाँ उस बग को ठीक करने के लिए एक पैच है :)

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
हे भगवान। आप साहब विद्वान और प्रतिभाशाली हैं।


1
वास्तव में, मुझे नहीं पता कि कैसे करना है? मैं अन्य लोगों के सॉफ़्टवेयर के लिए वेब-आधारित डाउनलोड पोर्टल के अलावा खुद को जीथब का उपयोग नहीं करता। आप चाहें तो ऐसा कर सकते हैं। मैं आधिकारिक तौर पर उपरोक्त कोड पर सभी कॉपीराइट को अस्वीकार करता हूं और इसे सार्वजनिक डोमेन में रखता हूं।
आयनोकॉस्ट ब्रिघम

+1, लेकिन यह ठीक 10% नहीं है - rand() "0 और RAND_MAX के बीच की सीमा में एक छद्म यादृच्छिक संख्या लौटाता है," जो पुस्तकालय-निर्भर है लेकिन 100 तक विभाज्य नहीं हो सकता है।
l0b0

1
तकनीकी रूप से, निष्पादन () फ़ंक्शन वापस आ सकते हैं। से man 3 exec: "यदि कोई भी निष्पादन () फ़ंक्शंस देता है, तो एक त्रुटि हुई है। रिटर्न वैल्यू -1 है, और त्रुटि को इंगित करने के लिए वैश्विक चर इरनो को सेट किया जाएगा।"
आयनोक्स्टेल ब्रिघम

24

आप यहाँ स्रोत कोड की जाँच कर सकते हैं - https://github.com/mtoyoda/sl , अफसोस वहाँ कोई अन्य विकल्प हैं जो दस्तावेज और दुख की बात है कि वास्तव में फ़ाइलों के नाम मुद्रित करेंगे के अलावा अन्य कोई विकल्प नहीं है।

तो ऐसा लगता है कि @ sfyn का उत्तर सही है।



5
@LegoStormtroopr, वास्तव में एक महत्वपूर्ण मुद्दा है।
ग्रीम

5
संभवतः हार्दिक के बाद से सबसे बड़ी बग!

12

ध्यान दें कि I0b0 का उत्तर केवल एक प्रमाण है जो slकभी भी सभी और केवल वर्तमान निर्देशिका सूची को प्रदर्शित नहीं करेगा । हालाँकि, ऐसी परिस्थितियाँ हैं जो slवर्तमान निर्देशिका को अतिरिक्त 'सूचना' के साथ मिलकर प्रदर्शित करेगी।

उदाहरण के लिए, खाली निर्देशिका में:

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

पहली छह पंक्तियों में निर्देशिका की सामग्री को सूचीबद्ध करेगा, और शेष 10 पंक्तियों पर आसानी से इस सूची को एक ट्रेन की छवि (धूम्रपान के बिना) के साथ सुशोभित करेगा।


3
या, वर्तमान निर्देशिका एक खाली सेट हो सकती है। जिस स्थिति में सभी (गैर-मौजूद) फाइलें ट्रेन की तस्वीर के साथ प्रदर्शित की जाती हैं। :-)
केविन सीफर्ट

6

मुझे पता है कि लेगो स्टॉर्मट्रूप ने एक टिकट लॉग किया है ताकि महत्वपूर्ण मुद्दे को संबोधित किया जा सके। कौन जानता है कि इसे ठीक करने में कितना समय लग सकता है?

जैसे, मैंने वर्कअराउंड प्रदान किया है ताकि गंभीर समस्या के कारण प्रभाव कम से कम हो। आप एक शेल फ़ंक्शन बना सकते हैं जो slनिष्पादित करेगा sl:

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

अब sl, छिटपुट रूप से, निर्देशिका सामग्री को सूचीबद्ध करेगा।


2

यदि आप इसे उर्फ ​​करते हैं ls, तो यह वर्तमान निर्देशिका को प्रिंट करेगा - वास्तव में, एक बार जब मैंने भाप इंजन लोकोमोटिव पर हँसना बंद कर दिया, तो मैंने उसे अपनी उपनाम सूची में जोड़ा।


1

आप हमेशा यह समीक्षा कर सकते हैं कि यह अपने लिए स्रोत कोड है, और आप किसी भी हालत में देखेंगे कि यह कभी भी वास्तविक lsकमांड नहीं करता है और न ही निर्देशिका प्रदर्शित करता है।

https://github.com/mtoyoda/sl

स्रोत वास्तव में सरल है। यहां तक ​​कि अगर आप "एक कोडर नहीं हैं" तो भी आपको इसे समझने में सक्षम होना चाहिए।

मेरा मानना ​​है कि आपके द्वारा ऊपर पोस्ट किया गया "बग" वास्तव में सिर्फ जेस्ट में है (और इस लोल की तरह चर्चा का कारण बनने के लिए)


1

हाँ, slयदि आप bash या जो भी शेल आप उपयोग कर रहे हैं, उसमें उपयुक्त उर्फ ​​को सेट करने पर ls की तरह कार्य करेगा!

मैं वास्तव में सहित के लिए कई अन्य उपनाम है

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

इसलिए सुझाव के लिए धन्यवाद - मैं जोड़ूंगा

alias sl='ls -FG'

(है कि मैंने कभी टाइपिंग याद नहीं slलेकिन फिर मैं हमें के लिए करते हैं llया lh!)


-1

आप भी कर सकते थे जैसे मैं भी करता हूं ...

एमवी / यूएसआर / गेम्स / एसएल / यूएसआर / गेम्स / एसएल-ओएलडी

एमवी / यूएसआर / गेम्स / एलएस / यूएसआर / गेम्स / एलएस-ओएलडी

नैनो / यूएसआर / गेम्स / एसएल

निम्नलिखित पेस्ट करें:

#! / Bin / bash

गूँज "आप 'एसएल' की 'स्लिप' टाइप करें!"

/ Usr / खेल / sl की उम्र

गूंज "लगता है कि मैं इसे वैसे भी सूचीबद्ध कर सकता हूं ..."

/ Bin / ls

बाहर निकलने के लिए CTRL + X दबाएँ और सेव करने के लिए Y।

नैनो / यूएसआर / गेम्स / एलएस

निम्नलिखित पेस्ट करें:

#! / Bin / bash

गूँज "आप 'एलएस' 'एलएस' के इंस्टाग्राम!"

/ Usr / खेल / sl की उम्र

गूंज "लगता है कि मैं इसे वैसे भी सूचीबद्ध कर सकता हूं ..."

/ Bin / ls

बाहर निकलने के लिए CTRL + X दबाएँ और सेव करने के लिए Y।

पुनश्च: आप इसे पुनर्जीवित करने के लिए स्वागत कर रहे हैं .. "sl linux कमांड" की खोज अभी भी इस धागे को ऊपर लाती है, इसलिए मैंने सोचा कि मैं एक वास्तविक उत्तर दूंगा कि कैसे मैंने इसे फाइलों की सूची बनाई ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.