Red Hat Linuxのターミナルをいじり回していて、アスタリスク(*
)に続いてreturnを実行すると、私のディレクトリにあるプログラムの1つが実行されました。どうして?
私の推測では、Unixはそれをワイルドカードとして扱い、最初のアルファベットプログラムを実行したと考えられます。 my_program.exe
およびone_of_my_programs.program
は、ファイルの名前を入力するだけで実行できます。ワイルドカード演算子は、考えられるすべてのファイルを表します。プログラムはアルファベット順で最初なので、Unixはそれを実行します。これは正しい判断ですか?
あなたの解釈は正しいです。残りのファイルは、パラメーターリストとして表示されます。
これは、プログラムに実行可能ビットが設定されていて、現在のディレクトリがPATH
リストにある場合にのみ行われることに注意してください。
理解に役立つかもしれないいくつかのメモ:-
./*
と入力した場合、PATH
エントリは必須ではありません。. *
または. ./*
と入力し、最初に一致したファイルがスクリプトである場合、実行可能である必要はなく、現在のディレクトリがPATH
にある必要もありません(シェルでは当てはまらない場合があります) bash
以外)。これは、.
が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
、多かれ少なかれ、思いつくことができる偽のスペースの最悪の配置。