`sl`は現在のディレクトリを表示しますか?


106

ループの外にいる人のための、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実際にない、現在のディレクトリを表示しますか?


45
+1 何十年も知らなかった非常に便利なユーティリティを紹介してくれました。
devnull

3
@slm私たちはそれを確認したので、この重大な問題に対処するバグを入れました:#9

44
ディレクトリの内容はめったに表示されないという。だから| | | H |__--------------------| [___] | =| |、のようなファイルがある場合、slはそれらを示していると思います。
ミスターリスター14

3
プルリクエスト株式会社:github.com/mtoyoda/sl/pull/11
asteri

7
私は14年間Unix / Linuxのシステム管理者であり、この信じられないほどのツールについて聞いたことはありませんでした。学ぶことがどれほどあるかは驚くべきことです。
マイケルマルティネス14

回答:


183

私が知る限りsl、現在のディレクトリを表示する唯一の条件は、それをとして入力するときですls


8
+1ユーモラスですが、より信頼できる答えを期待しています。

37
@LegoStormtroopr-LegoEmperorの計量を待っているのでしょうか?
mikeserv 14

42
  • 補題: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。


6
/Unixファイル名では許可されていない 'es がいくつか含まれています。
mtak 14

2
あなたがやったmkdir -p "$(dirname "$(sl)")"なら、あなたはできるtouch "$(sl)"。もちろん、OS / FSの制限をテストしているかもしれません。そして、それを掃除して楽しんでください。
ケビン14

3
@MrLister確かに、ファイルシステムにもバグがあり、そのようなファイルを作成できる場合にのみ可能です。参考文献はありますか?
l0b0 14

1
@VolkerSiegel:そうでもない。Windowsはとの両方/をサポートし\、それらは同じことを意味します。
コンラッドボロスキー14

3
H(たとえば)というファイルがある場合、sl実際に表示されます。それは他の多くのことも示しているだけです。:-)
ShreevatsaR 14

38

そのバグを修正するパッチがあります:)

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

5
ああ、主よ。あなたは学者であり天才です。

3
ください...お願いします... そのパッチのプルリクエストを提出して

1
うん、私は実際にそれを行う方法がわかりませんか?他の人のソフトウェアのWebベースのダウンロードポータルとして以外は、自分でgithubを使用していません。必要に応じてそれを行うことができます。上記のコードに関するすべての著作権を公式に放棄し、パブリックドメインに置きます。
イオノクラストブリガム14

+1、それは正確に10%ではない- rand() 「0とRAND_MAXの範囲の擬似ランダム整数、返し」ライブラリ依存性であるが、100で割り切れないかもしれない
l0b0

1
技術的には、execx()関数は戻ることができます。From man 3 exec:「exec()関数のいずれかが戻った場合、エラーが発生しています。戻り値は-1であり、グローバル変数errnoはエラーを示すように設定されます。」
イオノクラストブリガム14

24

ここでソースコードを確認できます -https ://github.com/mtoyoda/sl、文書化されたもの以外のオプションはありませんが、残念ながら実際にはファイル名を印刷するものはありません。

したがって、@ sfynの答えが正しいようです。



5
@LegoStormtroopr、確かに重大な問題。
グレアム14

5
おそらくハートブリード以来の最大のバグ!

12

I0b0の答えは、slすべてを表示することは決してなく、現在のディレクトリリストのみを表示するだけの証拠であることに注意してください。ただし、sl現在のディレクトリ一覧を追加の「情報」とともに表示する状況があります。

たとえば、空のディレクトリで:

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

最初の6行にはディレクトリの内容がリストされ、残りの10行にはこのリストが電車の画像(煙なし)で便利に装飾されます。


3
または、現在のディレクトリを空のセットにすることもできます。その場合、すべての(存在しない)ファイルが電車の写真とともに表示されます。:-)
ケビンサイフェルト

6

レゴストームトルーパーチケット記録し、重大な問題に対処できることを知っています。修正の展開に時間がかかる可能性があるのは誰ですか?

そのため、重大な問題による影響を最小限に抑えるための回避策を提供しました。sl実行するシェル関数を作成できますsl

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

これで、起動slすると、散発的に、ディレクトリの内容がリストされます。


2

エイリアスを作成するとls、現在のディレクトリが出力されます。実際、蒸気機関車の笑いが止まったら、エイリアスのリストに追加しました。


1

いつでも自分のソースコードを確認でき、実際のlsコマンドを実行したり、ディレクトリを表示したりすることはありません。

https://github.com/mtoyoda/sl

ソースは実際にはかなり単純です。あなたが「コーダーではない」としても、その大部分を理解できるはずです。

あなたが上に投稿した「バグ」は本当に冗談であると信じています(そしてこの笑のような議論を引き起こすために)


1

はい、slbashまたは使用しているシェルで適切なエイリアスを設定すると、lsのように動作します!

私は実際にlsのいくつかのエイリアスを持っています

alias ls='ls -FG'
alias ll='ls -lFG'

提案に感謝します—私は追加します

alias sl='ls -FG'

(私が今までに入力して覚えていないことslが、その後、私は私たちに傾向がありますlllh!)


-1

私もそうすることができます...

mv / usr / games / sl / usr / games / sl-OLD

mv / usr / games / LS / usr / games / LS-OLD

nano / usr / games / sl

以下を貼り付けます。

#!/ bin / bash

echo "'ls'の代わりに 'sl'と入力しました!"

/ usr / games / sl-old

echo「とにかくリストできると思う...」

/ bin / ls

Ctrlキーを押しながらXキーを押して終了し、Yキーを押して保存します。

nano / usr / games / LS

以下を貼り付けます。

#!/ bin / bash

echo "'ls'の代わりに 'LS'を入力しました!"

/ usr / games / sl-old

echo「とにかくリストできると思う...」

/ bin / ls

Ctrlキーを押しながらXキーを押して終了し、Yキーを押して保存します。

PS:これを復活させることを歓迎します。「sl linuxコマンド」を検索すると、まだこのスレッドが表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.