`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_|
     \_/      \__/  \__/  \__/  \__/      \_/               \_/   \_/    \_/   \_/

그러나의 man 페이지 sl에서 다음 버그가 표시됩니다.

BUGS
        It rarely shows contents of current directory.

그래서, 문제는 남아있다, 몇 가지 조건이, 어떤에서 sl실제로 않습니다 현재 디렉토리를 보여?


45
내가 수십 년 동안 알지 못했던 매우 유용한 유틸리티 를 소개해 준 +1 .
devnull

3
@slm 우리는 이것을 주장했고,이 중요한 문제를 해결하는 버그를 넣었습니다 : # 9

44
디렉토리 의 내용 을 거의 표시하지 않습니다 . 그래서 나는 당신이 같은 파일을 가지고 있다면 | | | H |__--------------------| [___] | =| |, sl은 그 파일을 의미한다고 가정 합니다.
Mr Lister


7
나는 14 년 동안 유닉스 / 리눅스 시스템 관리자였으며이 놀라운 도구에 대해 들어 본 적이 없다. 배워야 할 것이 얼마나 놀랍습니다.
Michael Martinez

답변:


183

내가 아는 sl한 현재 디렉토리 를 표시하는 유일한 조건 은로 잘못 입력했을 때 ls입니다.


8
+1 유머러스하지만 더 권위있는 답변을 기대하고 있습니다.

37
@ LegoStormtroopr-아마도 당신은 LegoEmperor가 무게를 기다리는 것을 기다리고 있습니까?
mikeserv

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의 한계를 테스트하고있을 수 있습니다. 그리고 그것을 청소하는 재미가 있습니다.
Kevin

3
@MrLister 파일 시스템에 버그가있어 그러한 파일을 만들 수있는 경우에만 가능합니다. 당신은 참조가 있습니까?
l0b0

1
@ VolkerSiegel : 실제로는 아닙니다. 윈도우를 모두 지원 /하고 \, 그들은 같은 일을 의미한다.
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 () 함수가 반환 될 수 있습니다. From man 3 exec: "exec () 함수 중 하나가 반환되면 오류가 발생했을 것입니다. 반환 값은 -1이며 전역 변수 errno는 오류를 나타내도록 설정됩니다."
Ionoclast Brigham

24

https://github.com/mtoyoda/sl 에서 소스 코드를 확인할 수 있습니다. 아직 문서화 된 옵션 이외의 다른 옵션은 없으며 실제로 파일 이름을 인쇄하는 옵션은 없습니다.

따라서 @sfyn의 대답 이 올바른 것 같습니다.



5
@LegoStormtroopr, 정말로 중요한 문제입니다.
Graeme

5
Heartbleed 이후 가장 큰 버그 일 것입니다!

12

I0b0의 답변은 현재 디렉토리 목록을 sl모두 표시하지 않는 증거 일뿐 입니다. 그러나 sl추가 '정보'와 함께 현재 디렉토리 목록을 표시하는 상황이 있습니다 .

예를 들어, 빈 디렉토리에서 :

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

처음 6 줄에는 디렉토리의 내용이 나열되고 나머지 10 줄에는 열차 이미지 (연기없이)를 사용하여이 목록을 편리하게 장식합니다.


3
또는 현재 디렉토리가 빈 세트 일 수 있습니다. 이 경우 모든 (존재하지 않은) 파일이 열차 그림과 함께 표시됩니다. :-)
Kevin Seifert

6

내가 알고 레고 Stormtroopr가 있다 티켓 기록 중요한 문제가 해결 될 수 있도록합니다. 수정 프로그램을 출시하는 데 시간이 얼마나 걸릴지 누가 알겠습니까?

따라서 중대한 문제로 인한 영향을 최소화 할 수있는 해결 방법을 제공했습니다. 다음 sl을 실행 하는 쉘 함수 를 작성할 수 있습니다 sl.

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

이제 호출 sl하면 디렉토리 내용이 산발적으로 나열됩니다.


2

에 별칭을 지정 ls하면 현재 디렉토리가 인쇄됩니다. 실제로 증기 엔진 기관차에 대한 웃음을 멈 추면 별칭 목록에 추가했습니다.


1

항상 소스 코드를 직접 검토 할 수 있으며 어떠한 조건에서도 실제 ls명령을 수행 하거나 디렉토리를 표시하지 않습니다.

https://github.com/mtoyoda/sl

소스는 실제로 간단합니다. "코더가 아닌"경우에도 대부분의 코드를 이해할 수 있어야합니다.

나는 당신이 위에 게시 한 "버그"가 실제로 농담에 있다고 생각합니다 (그리고이 lol과 같은 토론을 유발합니다)


1

예, slbash 또는 사용중인 쉘에 적절한 별칭을 설정하면 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 / games / sl

다음을 붙여 넣습니다.

#! / bin / bash

echo "유형 'sl'INSTEAD OF 'ls'!"

/ usr / games / sl-old

echo "어쨌든 나열 할 수있을 것 같아 ..."

/ bin / ls

CTRL + X를 눌러 종료하고 Y를 눌러 저장하십시오.

나노 / usr / games / LS

다음을 붙여 넣습니다.

#! / bin / bash

echo "유형 'LS'INSTEAD OF 'ls'!"

/ usr / games / sl-old

echo "어쨌든 나열 할 수있을 것 같아 ..."

/ bin / ls

CTRL + X를 눌러 종료하고 Y를 눌러 저장하십시오.

추신 : 당신은 이것을 부활시키는 것을 환영합니다. "sl linux command"로 검색하면 여전히이 스레드가 나타납니다. 그래서 파일을 어떻게 나열했는지에 대한 진정한 대답을 줄 것이라고 생각했습니다 ...

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.