`sl 'เคยแสดงไดเรกทอรีปัจจุบันหรือไม่?


106

สำหรับผู้ที่ออกจากวงที่เป็นเครื่องมือบรรทัดคำสั่งตลกที่มีความหมายที่จะเดินทางคนขึ้นไปถ้าพวกเขาพิมพ์ผิดsl lsเมื่อเรียกใช้มันจะพิมพ์ Steam Locomotive ตัวอย่างเช่น:

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

อย่างไรก็ตามในหน้า man สำหรับslมันระบุข้อผิดพลาดดังต่อไปนี้:

BUGS
        It rarely shows contents of current directory.

ดังนั้นคำถามยังคงมีเงื่อนไขบางอย่างภายใต้ที่slจริงจะแสดงไดเรกทอรีปัจจุบันหรือไม่


45
+1 ที่แนะนำให้ฉันรู้จักกับโปรแกรมอรรถประโยชน์ที่มีประโยชน์มากฉันไม่รู้มานานหลายทศวรรษ
devnull

3
@slm เรายืนยันแล้วดังนั้นฉันจึงใส่จุดบกพร่องที่แก้ไขปัญหาที่สำคัญนี้: # 9

44
มันบอกว่ามันไม่ค่อยแสดงเนื้อหาของไดเรกทอรี ดังนั้นฉันคิดว่าพวกเขาหมายถึงถ้าคุณมีไฟล์เช่น| | | H |__--------------------| [___] | =| |sl แสดงให้พวกเขา
นาย Lister

3
คำขอดึง inc: github.com/mtoyoda/sl/pull/11
asteri

7
ฉันเป็น Unix / Linux ดูแลระบบมา 14 ปีแล้วและไม่เคยได้ยินเกี่ยวกับเครื่องมืออันเหลือเชื่อนี้เลย มันน่าทึ่งมากที่มีการเรียนรู้
Michael Martinez

คำตอบ:


183

เท่าที่ผมรู้ว่ามีเงื่อนไขเพียงตามที่แสดงไดเรกทอรีปัจจุบันคือเมื่อคุณพิมพ์ผิดเป็นslls


8
+1 อารมณ์ขัน แต่ฉันหวังว่าจะได้คำตอบที่เชื่อถือได้มากขึ้น

37
@ LegoStormtroopr - บางทีคุณกำลังรอ LegoEm Emperor ที่จะชั่งน้ำหนักอยู่ใช่ไหม?
mikeserv

42
  • เล็มม่า: slพิมพ์หัวรถจักรไอน้ำ
  • แทรก: เริ่มชื่อไฟล์ที่ไม่สามารถมีเครื่องหมายทับ (แม้ว่าเส้นทางได้)
  • บทแทรก: หัวรถจักรไอน้ำประกอบด้วยเครื่องหมายทับ:

    $ 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
มันมีหลาย/'ซึ่งไม่ได้รับอนุญาตในชื่อไฟล์ Unix
mtak

2
หากคุณไม่ได้ที่คุณจะทำmkdir -p "$(dirname "$(sl)")" touch "$(sl)"แน่นอนคุณอาจทดสอบขีด จำกัด ของระบบปฏิบัติการ / FS ของคุณ และสนุกไปกับการทำความสะอาด
เควิน

3
@MrLister แน่นอนว่าจะเป็นไปได้ก็ต่อเมื่อระบบไฟล์มีข้อผิดพลาดในการอนุญาตให้สร้างไฟล์ดังกล่าว คุณมีข้อมูลอ้างอิงหรือไม่?
l0b0

1
@VolkerSiegel: ไม่จริง Windows รองรับทั้ง/และ\และพวกเขาหมายถึงสิ่งเดียวกัน
Konrad Borowski

3
หากคุณมีไฟล์ชื่อH(เช่น) slแสดงว่ามันไม่แน่นอน เป็นเพียงว่ามันยังแสดงให้เห็นสิ่งอื่น ๆ อีกมากมาย :-)
ShreevatsaR

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
ใช่แล้วฉันไม่รู้จริงๆว่าต้องทำยังไง ฉันไม่ใช้ GitHub เองยกเว้นเป็นพอร์ทัลดาวน์โหลดทางเว็บสำหรับซอฟต์แวร์ของผู้อื่น คุณสามารถทำได้ถ้าคุณชอบ ฉันสละสิทธิ์อย่างเป็นทางการเกี่ยวกับรหัสข้างต้นและวางไว้ในโดเมนสาธารณะ
Ionoclast Brigham

+1 แต่นั่นไม่ใช่ 10% อย่างแน่นอน - rand() "ส่งกลับหมายเลขสุ่มหลอกในช่วงระหว่าง 0 ถึง RAND_MAX"ซึ่งขึ้นอยู่กับไลบรารี แต่อาจหารด้วย 100 ไม่ได้
l0b0

1
ในทางเทคนิคฟังก์ชั่น execx () สามารถกลับมา จากman 3 exec: "หากฟังก์ชัน exec () ใด ๆ ส่งคืนจะเกิดข้อผิดพลาดขึ้นค่าส่งคืนคือ -1 และตัวแปรโกลบอล errno จะถูกตั้งค่าเพื่อระบุข้อผิดพลาด"
Ionoclast Brigham

24

คุณสามารถตรวจสอบซอร์สโค้ดได้ที่นี่ - https://github.com/mtoyoda/slอนิจจาไม่มีตัวเลือกอื่นนอกเหนือจากที่บันทึกไว้และไม่มีอะไรเศร้าที่จะพิมพ์ชื่อไฟล์

ดูเหมือนว่าคำตอบของ @ sfyn คือคำตอบที่ถูกต้อง


7
ขอขอบคุณสำหรับการเชื่อมโยงที่ฉันได้ยื่นตั๋วกับนักพัฒนาเพื่อดูว่านี้จะสามารถแก้ไขได้

5
@ LegoStormtroopr แน่นอนปัญหาที่สำคัญ
แกรม

5
อาจเป็นข้อผิดพลาดที่ใหญ่ที่สุดตั้งแต่ Heartbleed!

12

โปรดทราบว่าคำตอบ I0b0 เป็นเพียงหลักฐานที่slจะไม่แสดงทั้งหมดและมีเพียงรายชื่อไดเรกทอรีปัจจุบัน อย่างไรก็ตามมีสถานการณ์ที่slจะแสดงรายการไดเรกทอรีปัจจุบันพร้อมกับ 'ข้อมูล' เพิ่มเติม

ตัวอย่างเช่นในไดเรกทอรีว่าง:

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

จะอยู่ในหกบรรทัดแรกที่แสดงรายการเนื้อหาของสารบบและในส่วนที่เหลืออีก 10 บรรทัดจะช่วยให้รายชื่อนี้สะดวกยิ่งขึ้นด้วยภาพรถไฟ (ไม่มีควัน)


3
หรือไดเรกทอรีปัจจุบันอาจเป็นชุดว่างเปล่า ในกรณีนี้ไฟล์ทั้งหมด (ไม่มีอยู่) จะแสดงพร้อมกับรูปภาพของรถไฟ :-)
Kevin Seifert

6

ฉันรู้ว่าLego Stormtrooprได้บันทึกตั๋วเพื่อให้สามารถแก้ไขปัญหาสำคัญได้ ใครจะรู้ว่าใช้เวลานานเท่าไรในการแก้ไขปัญหา?

ด้วยเหตุนี้ฉันจึงให้วิธีแก้ปัญหาเพื่อลดผลกระทบอันเนื่องมาจากปัญหาร้ายแรง คุณสามารถสร้างฟังก์ชั่นเชลล์slที่จะรันsl:

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

ตอนนี้slจะเรียกรายการเนื้อหาไดเรกทอรีเป็นระยะ ๆ


2

ถ้าคุณใช้นามแฝงมันlsจะพิมพ์ไดเรกทอรีปัจจุบัน - อันที่จริงเมื่อฉันหยุดหัวเราะที่หัวรถจักรไอน้ำฉันเพิ่มมันเข้าไปในรายการนามแฝงของฉัน


1

คุณสามารถตรวจสอบซอร์สโค้ดของตัวเองได้เสมอและคุณจะเห็นว่าไม่มีเงื่อนไขใด ๆ ที่จะทำงานกับlsคำสั่งจริงหรือแสดงไดเรกทอรี

https://github.com/mtoyoda/sl

แหล่งที่มาค่อนข้างง่ายจริง แม้ว่าคุณจะเป็น "ไม่ใช่ coder" คุณก็ควรจะสามารถเข้าใจได้เกือบทั้งหมด

ฉันเชื่อว่า "ข้อผิดพลาด" ที่คุณโพสต์ไว้ด้านบนเป็นเรื่องตลก (และทำให้เกิดการสนทนาเช่นนี้ฮ่า ๆ )


1

ใช่slจะทำหน้าที่เหมือน ls ถ้าคุณตั้งค่านามแฝงที่เหมาะสมในการทุบตีหรือสิ่งที่คุณใช้เปลือก!

ฉันมีนามแฝงหลายอย่างสำหรับ ls รวมถึง

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

ขอบคุณมากสำหรับคำแนะนำ - ฉันจะเพิ่ม

alias sl='ls -FG'

(ไม่ใช่ว่าฉันจำการพิมพ์ได้slแต่ฉันมักจะชอบเราllหรือlh!)


-1

คุณสามารถทำเช่นฉันยัง ...

mv / usr / games / sl / usr / games / sl-OLD

mv / usr / games / LS / usr / games / LS-OLD

นาโน / usr / เกม / sl

วางต่อไปนี้:

#! / bin / ทุบตี

echo "คุณพิมพ์ 'sl' แทน 'ls'!"

/ เกมส์ / usr / SL-เก่า

echo "เดาว่าฉันสามารถแสดงรายการได้อีก ... "

/ bin / LS

กด CTRL + X เพื่อออกและ Y เพื่อบันทึก

นาโน / usr / games / LS

วางต่อไปนี้:

#! / bin / ทุบตี

echo "คุณพิมพ์ 'LS' แทน 'ls'!"

/ เกมส์ / usr / SL-เก่า

echo "เดาว่าฉันสามารถแสดงรายการได้อีก ... "

/ bin / LS

กด CTRL + X เพื่อออกและ Y เพื่อบันทึก

PS: คุณยินดีที่จะฟื้นฟูสิ่งนี้ .. การค้นหาไปที่ "คำสั่ง sl linux" ยังคงนำเธรดนี้ขึ้นมาดังนั้นฉันคิดว่าฉันจะให้คำตอบที่แท้จริงว่าฉันทำรายการไฟล์อย่างไร ...

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.