ファイルを表示しないls "*"
について話すスレッドがありますが、実際にはなぜ単純なのでしょうか
ls *
コマンドは私の端末以外には何も出力しません
ls: invalid option -- '|'
Try 'ls --help' for more information.
ながら
ls
現在のディレクトリにあるすべてのファイルを
1 ferol readme.txt
2 fichier sarku
2018 GameShell Templates
22223333 '-|h4k3r|-' test
3 hs_err_pid2301.log test2
CA.txt important.top.secret.txt toto.text
CA.Zip JavaBlueJProject tp1_inf1070
countryInfo.txt liendur 'tp1_inf1070_A19(2) (1)'
currency liensymbolique tp1_inf1070_A19.tar
curreny LOL Videos
Desktop Longueuil 'VirtualBox VMs'
Documents Music words
douffos numbers Zip.zip
Downloads Pictures
examples.desktop Public
グロビングがここで有効にならない理由についてのアイデアはありますか?私はUbuntuで、ターミナルで働いています。違いが出るかどうかはわかりません。
ありがとう。
あなたが走るとき
ls *
グロビングは通常どおり有効になり、*
は現在のディレクトリ内のすべてのファイル名に展開されます。
-|h4k3r|-
これは-
で始まるので、ls
はそれをオプションとして解析しようとします(-a
や-l
など)。 |
は実際にはls
によって認識されるオプションではないため、エラーメッセージinvalid option
が表示され、(ファイルをリストせずに)終了します。
現在のフォルダのすべてを明示的にリストしたい場合は、代わりに
ls ./*
...すべてのファイル名の前に./
を付けます(そのため、エントリはオプションとして誤って解釈されません)、または
ls -- *
...ここで、--
は「オプションの終わりを示す区切り文字」です。残りの引数はファイル名です。
ここで欠けている重要な概念的飛躍は、グロビングが行われる場所だと思います。 ls
は、それ自体でグロビングを行うことはありません。引数を指定しない場合は、.
そして、コマンドラインで指定したディレクトリと同じように、そのディレクトリをリストします。
グロビングを行うのはシェルです。シェルは、結果を一連のコマンドライン引数としてls
に渡します。 ls
は、これらの引数を入力した場合、またはそれらがグロブ展開の結果である場合、手掛かりがありません。そして、他のコマンドライン引数と同じように、フラグを解析します。
これはWindowsでの動作ではなく、Windowsがコマンドラインプログラムを処理する方法の大きな欠陥だと思います。
ここでのもう1つの興味深いデモンストレーションは、一連のディレクトリを含むディレクトリを作成することです。その後、ls *
シェルでは、これらのディレクトリすべてを引数として提供し、ls
はそれらの各ディレクトリのリストを提供します。これは、.
引数を指定しなかった場合は、単純なデフォルトであり、特別な動作はありません。
あなたが言うなら ./*
の代わりに *
シェルは、すべての./
その前にあるので、ls
は引数をオプションとして解釈しません。もしあなたがそうするなら ls -- *
、ls
はオプションを解釈します--
これは、オプションの処理を中止し、残りの引数をすべて、リストを提供するファイルまたはディレクトリとして扱う必要があることを意味します。だから、私見、--
がより良い選択です。
--
慣習には、ほとんどのUnixコマンドラインユーティリティが続き、ほとんどの言語用に作成されたほとんどの引数解析ライブラリの標準機能です。
通常、コマンドls *
は、現在の作業ディレクトリ内のすべてのファイルとディレクトリを一覧表示する必要があります。あなたが直面している問題につながる2つのケースがあります。
--2
または-2
という名前のディレクトリなど、ディレクトリに含まれるファイルにサポートされていない文字が含まれていると、このようなエラーが発生します。例えば:
# ls -la | grep 2$
drwxrwxr-x 2 test test 4096 Oct 28 14:58 --2
# ls *
ls: unrecognized option '--2'
これは、-
で始まるファイル名がls
コマンドのオプションと見なされるためです。
そうでない場合は、.bashrc
ファイルにエイリアスが設定されている可能性があります。たとえば、エイリアスalias ls='ls –2'
を設定すると、ls
コマンドを使用できなくなります。これは、無効なオプション-2
が必要になるためです。