`sl`은 현재 디렉토리를 보여줍니까?

루프 아웃을하는 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실제로 않습니다 현재 디렉토리를 보여?



답변

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


답변

  • 렘마 : 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.


답변

이 버그를 수정하는 패치가 있습니다 🙂

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

답변

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

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


답변

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

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

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

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


답변

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

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

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

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


답변

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