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


21

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

私の最良の推測は、Unixがワイルドカードとしてそれを扱い、最初のアルファベットプログラムを実行したことです。my_program.exeone_of_my_programs.programはファイル名を入力するだけで実行できるため、ワイルドカード演算子はすべての可能なファイルを表します。プログラムは最初にアルファベット順であるため、Unixはそれを実行します。これは正しい判断ですか?


すべてのシェルが*アルファベット順の拡張をソートするわけではありませんが、bashはそれを行うものです。
アシェプラー

1
@aschepler:すべてのPOSIX準拠シェルは必須です。参照pubs.opengroup.org/onlinepubs/9699919799/utilities/...パラ3
dave_thompson_085

回答:


20

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

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

理解を助けるかもしれないメモのカップル:-

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

10
「これはこれだけを行います...」–より興味深い場合があります。PATH最初のファイルと同じ名前のシェル関数、ビルトイン、または実行可能ファイルがある場合、この他のコマンドが実行されます。mkdir foo; cd foo; touch rm xyz; ls; *; ls
カミルマシオロウスキ

@KamilMaciorowski-公正な点:私の声明「それはこれだけを行う...」は必要な条件を指定しましたが、十分条件ではありませんでした。*エイリアスの場合、コマンドの動作も異なります。
AFH

1
結論:これをしないでください!glob展開のアルファベット順に依存できると思われる場合でも、この順序はロケールに依存することに注意してください。
アーロン

に加えて、. *または. ./*1つの缶bash *(または他のシェル)。
オリビエデュラック

11

これは、それ.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

、考えられるスプリアススペースの最悪の配置を多かれ少なかれ。


1
パラメーターにrm()追加-iするか、パラメーターをチェックして、特定の数以上あるかどうか確認を求める関数を作成しても問題はありません。
AFH

3
「これは今まで読んだ中で最も恐ろしいメッセージの1つです」の+1。
Mehrdad

「これはセキュリティ上の理由から非常に悪い考えです(当然、Windowsは変更不可能なデフォルトにする必要がありました)。
ダンカンXシンプソン


Windowsが変更不可能なデフォルトにしたのには、十分な理由があります。DOSがディレクトリを実装する前から、下位互換性のチェーンを維持する必要があります。当時、PCを使用している人は誰もハードディスクを持っていなかったことに留意してください。フロッピーディスクは十分に小さいため、ディレクトリは最初は必要とは見なされませんでした。
ミューザー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.