
Red Hat Linux のターミナルでいろいろいじっていたところ、アスタリスク ( *
) を入力してからリターンキーを押すと、ディレクトリ内のプログラムの 1 つが実行されました。なぜでしょうか?
私の推測では、Unix はこれをワイルドカードとして扱い、アルファベット順で最初のプログラムを実行したと考えられます。my_program.exe
および はone_of_my_programs.program
ファイル名を入力するだけで実行できるため、ワイルドカード演算子はすべての可能なファイルを表します。プログラムはアルファベット順で最初のため、Unix はそれを実行します。これは正しい判断でしょうか?
答え1
あなたの解釈は正しいです。残りのファイルはパラメータ リストとして表示されます。
プログラムに実行ビットが設定されており、現在のディレクトリがリスト内にある場合にのみこれが行われることに注意してくださいPATH
。
理解を助けるかもしれないいくつかの注意事項:-
- 入力する場合
./*
、PATH
入力は必須ではありません。 . *
または と入力し. ./*
、最初に一致するファイルがスクリプトである場合、そのファイルは実行可能である必要はなく、現在のディレクトリが にある必要もありませんPATH
( 以外のシェルでは当てはまらない場合がありますbash
)。
答え2
これは、変数.
の一部であることを示していますPATH
。セキュリティ上の理由から、これは本当に悪い考えです (当然、Windows はこれを変更不可能なデフォルトにする必要がありました)。
しかし、この「提案」は、あまり有効ではありません。rm
現在のディレクトリにという名前のファイルがある場合は、*
デフォルト rm
:
/tmp$ mkdir ohno
/tmp$ cd ohno
/tmp/ohno$
/tmp/ohno$ ls
/tmp/ohno$ touch rm what
/tmp/ohno$ ls
rm what
/tmp/ohno$ *
/tmp/ohno$ ls
rm
/tmp/ohno$
ご覧のとおり、rm
実行されたのは現在のディレクトリ (空の実行不可能なファイル) ではなく、システムのデフォルトの です/bin/rm
。
ワイルドカードが関係する場合は、常にコマンドを再確認してください。以下は、これまで読んだ中で最も恐ろしいメッセージの 1 つです。
rm: cannot remove '.o': No such file or directory
これは呼び出しの結果です
rm * .o
多かれ少なかれ、考え得る最悪の偽のスペースの配置です。