익숙하지 않은 분들을 위해 설명하자면, 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
실제로 어떤 조건 하에서 어떤 조건이 존재하는가 하는 질문이 남아 있습니다.하다현재 디렉터리를 표시하시겠습니까?
답변1
내가 아는 한, sl
현재 디렉토리가 표시되는 유일한 조건은 로 잘못 입력한 경우입니다 ls
.
답변2
- Lemma:
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
현재 디렉토리를 표시하지 마십시오. 양자 전자 장치.
답변3
버그를 수정한 패치입니다 :)
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] == '-') {
답변4
I0b0의 답변은 단지 증거일 뿐이며 sl
모든 내용을 표시하지 않습니다.오직현재 디렉토리 목록. 그러나 어떤 경우에는 sl
현재 디렉토리 목록이 다른 "정보"와 함께 표시됩니다.
예를 들어, 빈 디렉터리에서는 다음과 같습니다.
$ touch ' ( ) (@@) ( ) (@) () @@ O @ O @ O'
$ touch ' (@@@)'
$ touch ' ( )'
$ touch ' (@@@@)'
$ touch ' ( )'
$ sl
처음 6줄은 디렉토리의 내용을 나열하고 나머지 10줄은 기차 이미지(연기가 없는)로 이 목록을 편리하게 장식합니다.