web-dev-qa-db-ja.com

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

ループから抜け出した人にとって、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を実行するいくつかの条件はありますか(== --- ==)現在のディレクトリを表示しますか? =

106
user53306

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

186
sfyn
  • 補題:slは蒸気機関車を印刷します
  • 補題:有効なファイル名にはスラッシュを含めることはできません(ただしpathsは使用できます)
  • 補題:蒸気機関車にはスラッシュが含まれています。

    $ 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。

41
l0b0

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

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

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

@ sfynの答え が正しいものであるように見えます。

23
Graeme

I0b0の答えは、slがすべてを表示せず、only現在のディレクトリリストを表示しないことの証明にすぎないことに注意してください。ただし、slが現在のディレクトリリストと追加の「情報」を表示する場合があります。

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

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

最初の6行でディレクトリの内容をリストし、残りの10行でこのリストを列車の画像(煙なし)で都合よく装飾します。

12
J.P.

Lego Stormtroopr には ログに記録されたチケット があり、重大な問題に対処できることを知っています。修正がロールアウトされるまでにかかる時間を知っている人はいますか?

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

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

ここでslを呼び出すと、散発的にディレクトリの内容が一覧表示されます。

6
devnull

エイリアスをlsにすると、現在のディレクトリが出力されます。実際、Steamエンジン機関車で笑うのをやめて、エイリアスのリストに追加しました。

2
notablytipsy

はい、slは、bashまたは使用しているシェルに適切なエイリアスを設定した場合、lsのように機能します。

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

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

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

alias sl='ls -FG'

slと入力したことを覚えているわけではありませんが、llまたはlhを使用する傾向があります!)

1

あなたはいつでも自分のソースコードをレビューすることができ、どんな状況でも実際のlsコマンドを実行したり、ディレクトリを表示したりしないことがわかります。

https://github.com/mtoyoda/sl

ソースは実際にはかなり単純です。 「コーダーではない」としても、ほとんどのことは理解できるはずです。

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

1
SnakeDoc