慣れていない人のために説明すると、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行は列車のイメージ(煙なし)でこのリストを便利に装飾します。