web-dev-qa-db-ja.com

Unixのスタンドアロンコマンドとしてのアスタリスクの機能は何ですか?

Red Hat Linuxのターミナルをいじり回していて、アスタリスク(*)に続いてreturnを実行すると、私のディレクトリにあるプログラムの1つが実行されました。どうして?

私の推測では、Unixはそれをワイルドカードとして扱い、最初のアルファベットプログラムを実行したと考えられます。 my_program.exeおよびone_of_my_programs.programは、ファイルの名前を入力するだけで実行できます。ワイルドカード演算子は、考えられるすべてのファイルを表します。プログラムはアルファベット順で最初なので、Unixはそれを実行します。これは正しい判断ですか?

21
user6086585

あなたの解釈は正しいです。残りのファイルは、パラメーターリストとして表示されます。

これは、プログラムに実行可能ビットが設定されていて、現在のディレクトリがPATHリストにある場合にのみ行われることに注意してください。

理解に役立つかもしれないいくつかのメモ:-

  • ./*と入力した場合、PATHエントリは必須ではありません。
  • . *または. ./*と入力し、最初に一致したファイルがスクリプトである場合、実行可能である必要はなく、現在のディレクトリがPATHにある必要もありません(シェルでは当てはまらない場合があります) bash以外)。
20
AFH

これは、.PATH変数の一部であることを示唆しています。これは、セキュリティ上の理由から非常に悪い考えです(当然、Windowsはそれを変更不可能なデフォルトにする必要がありました)。

ただし、この「提案」はあまり有効ではありません。現在のディレクトリにrmという名前のファイルがある場合、*defaultrm

/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でした。

ワイルドカードが含まれる場合は、常にコマンドを再確認してください。これが今まで読んだ中で最も恐ろしいメッセージの一つです:

rm: cannot remove '.o': No such file or directory

これは呼び出しの結果です

rm * .o

、多かれ少なかれ、思いつくことができる偽のスペースの最悪の配置。

11
user777455