ファイルを表示しないという内容のスレッドがありますが、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にいてターミナルで働いていますが、これがどのような違いがあるのかわかりません。
ありがとうございます。
答え1
走るとき
ls *
ワイルドカードは通常どおり動作し、*
次のような現在のディレクトリのすべてのファイル名に展開されます。
-|h4k3r|-
で始まる-
ので、ls
オプション(-a
または-l
)で構文解析してみてください。|
これは実際に認識されるオプションではないため、ls
エラーメッセージを表示してからinvalid option
終了します(ファイルリストなし)。
現在のフォルダ内のすべての項目を明示的に一覧表示するには、次の手順を試します。
ls ./*
...これにより、すべてのファイル名にプレフィックスが追加されます./
(アイテムがオプションとして誤って解釈されるのを防ぐため)。
ls -- *
...ここでは--
「オプションの終わりを表す区切り文字」があります。残りの引数はファイル名です。
答え2
ここで欠けている重要な概念的な飛躍は、ワイルドカードが行われる場所だと思います。ls
それ自体はワイルドカード操作を実行しません。引数を指定しないと、ユーザーが意味するものを想定し、コマンドライン.
で指定したディレクトリと同様にディレクトリが一覧表示されます。
ワイルドカード操作を実行するシェルです。その後、シェルは結果をコマンドライン引数として渡しますls
。ls
その引数を入力したのか、グローバル拡張の結果であるのかはわかりません。したがって、他のコマンドライン引数と同様にフラグを解析します。
これはWindowsで動作する方法ではなく、Windowsがコマンドラインプログラムを処理する方法に大きな欠陥だと思います。
ここでもう一つの興味深いデモは、複数のディレクトリを含むディレクトリを作成することです。その後、これを実行すると、ls *
シェルはこれらのすべてのディレクトリを引数として提供し、ls
各ディレクトリのリストを提供します。これは.
、引数を提供しないと仮定することが特別な動作ではなく単純な基本的な動作であることを示しています。
./*
シェルがグローバル拡張を実行してすべてがシェルの前に*
来ると、引数はオプションとして解釈されません。もしそうなら、オプションはオプションの処理を中止し、残りのすべての引数をリストする必要があるファイルまたはディレクトリとして処理する必要があることを意味します。したがって、IMHOはより良い選択です。./
ls
ls -- *
ls
--
--
--
ほとんどのUnixコマンドラインユーティリティはこの規則に従い、これはほとんどの言語用に書かれたほとんどの引数解析ライブラリの標準機能です。
答え3
通常、このコマンドはls *
現在の作業ディレクトリ内のすべてのファイルとディレクトリを一覧表示する必要があります。現在直面している問題を引き起こす可能性がある2つの状況があります。
このタイプのエラーは、ディレクトリに含まれるファイルに
--2
"or"という名前のディレクトリなど、サポートされていない文字が含まれている場合に-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
答え4
これは「-|」というファイルがあるという意味です。シェル(bash、kshなど)が機能するため、すべてのワイルドカード式は現在のディレクトリの内容に対して評価されます。今後コマンドが呼び出されるので、次のコマンドがある場合-|ls *
が呼び出され、ls file1 file2 ... -| ...
このエラーが発生します。
削除または名前を変更する方法は、たとえば名前をmv './-|' xyz
。xyz