루프 아웃을하는 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
하면 현재 디렉토리가 인쇄됩니다. 실제로 증기 엔진 기관차에 대한 웃음을 멈 추면 별칭 목록에 추가했습니다.