ループから抜け出した人にとって、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
がを実行するいくつかの条件はありますか(== --- ==)現在のディレクトリを表示しますか? =
私の知る限り、sl
が現在のディレクトリを表示する唯一の条件は、ls
と誤って入力したときです。
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
は現在のディレクトリを表示しません。 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
がすべてを表示せず、only現在のディレクトリリストを表示しないことの証明にすぎないことに注意してください。ただし、sl
が現在のディレクトリリストと追加の「情報」を表示する場合があります。
たとえば、空のディレクトリで:
$ touch ' ( ) (@@) ( ) (@) () @@ O @ O @ O'
$ touch ' (@@@)'
$ touch ' ( )'
$ touch ' (@@@@)'
$ touch ' ( )'
$ sl
最初の6行でディレクトリの内容をリストし、残りの10行でこのリストを列車の画像(煙なし)で都合よく装飾します。
Lego Stormtroopr には ログに記録されたチケット があり、重大な問題に対処できることを知っています。修正がロールアウトされるまでにかかる時間を知っている人はいますか?
そのため、重大な問題による影響を最小限に抑えるための回避策を用意しました。 sl
を実行するシェル関数sl
を作成できます。
sl() {
((RANDOM%42)) && command sl || ls;
}
ここでsl
を呼び出すと、散発的にディレクトリの内容が一覧表示されます。
エイリアスをls
にすると、現在のディレクトリが出力されます。実際、Steamエンジン機関車で笑うのをやめて、エイリアスのリストに追加しました。
はい、sl
は、bashまたは使用しているシェルに適切なエイリアスを設定した場合、lsのように機能します。
私は実際にlsのエイリアスをいくつか持っています
alias ls='ls -FG'
alias ll='ls -lFG'
提案に感謝します—追加します
alias sl='ls -FG'
(sl
と入力したことを覚えているわけではありませんが、ll
またはlh
を使用する傾向があります!)
あなたはいつでも自分のソースコードをレビューすることができ、どんな状況でも実際のls
コマンドを実行したり、ディレクトリを表示したりしないことがわかります。
ソースは実際にはかなり単純です。 「コーダーではない」としても、ほとんどのことは理解できるはずです。
あなたが上に投稿した「バグ」は本当に冗談だと思います(そしてこの笑のような議論を引き起こすために)