「*」コマンドの出力が起動するのはなぜですか?

「*」コマンドの出力が起動するのはなぜですか?

コマンドを使用しましたが、次の*エラーが表示されました。

bash: boot: command not found

このエラーはなぜ発生しますか?

答え1

コマンドラインに入力した最初の単語は、シェルのコマンド名として解釈されます。

シェルは、*ファイル名のワイルドカード文字を現在のディレクトリに表示されるすべての名前に拡張します。名前はアルファベット順にソートされます。

現在存在するディレクトリの名前は名前bootです。ただ入るという意味だ* その特定のディレクトリからbootこれは、そのディレクトリの他のすべての名前をコマンドライン引数として使用して呼び出されたコマンドを実行するのと同じです。

bootシステムは現在呼び出されているコマンドがないため、$PATHシェルでそのコマンドが見つからないと文句を言います。

それはすべてです。

私のシステムの例(zsh代わりにシェルを実行しますbashが、その点で同じように動作します):

% cd /
% ls
altroot    bsd        bsd.sp     home       sbin       usr
bin        bsd.booted dev        mnt        sys        var
boot       bsd.rd     etc        root       tmp
% *
zsh: command not found: altroot

just を使用すると、*シェルは、名前が付けられたコマンドを実行しようとします。ディレクトリのファイル名グロービングパターン拡張からaltroot名前altroot(ディレクトリの名前)が最初に来るためです。*

ファイル名のグロービングパターンで実行するコマンドを選択することは、エラーが発生しやすく、危険なので避けるのが最善です。


ある程度関連する逸話で、私は信じる-i私は、ユーザーが重要なファイルを含むディレクトリに名前付きファイルを作成するのを見ました。だから彼らはおそらく次のようなものを持っているでしょう。

$ ls -l
total 0
-rw-r--r--  1 myself  wheel  0 Apr 16 18:49 -i
-rw-r--r--  1 myself  wheel  0 Apr 16 18:49 important-file-1.txt
-rw-r--r--  1 myself  wheel  0 Apr 16 18:49 important-file-2.txt
-rw-r--r--  1 myself  wheel  0 Apr 16 18:49 important-file-3.txt

まず、どのように-iソートされているかを確認してください。つまり、rm -rf *このディレクトリでこれを(間違って)実行すると、次のことが発生します。

$ rm -rf *
remove important-file-1.txt? n
remove important-file-2.txt? n
remove important-file-3.txt? n

つまり、-i名前がオプションとして挿入され、ファイルを削除する前に確認メッセージがrm -rf表示されます。rmそれから彼らは仕事をやめる機会がありました。

これは面白い小さなトリックですが、誤ってファイルを削除する問題を解決する正しい方法ではありません。正しい解決策はそれ問題は、定期的にバックアップを実行することです。

関連情報