スラッシュは何をしますか? [コピー]

スラッシュは何をしますか? [コピー]

私が理解している制限では:

  • ./filenamefilenameスクリプトとして実行されます。
  • ./現在のディレクトリを表します。

./がaの前に来ると、その効果は何ですか(ある場合)グローバル予選(フィルター):

qpdf --empty --pages ./*.pdf(nOn) -- output.pdf

この質問は、なしで実行しても./同じ結果が出てくるようで尋ねることです。

答え1

プレフィックス./(またはパス)は、ダッシュで始まるファイル名がオプションと見なされないようにします。

$ touch ./-l foo bar
$ ls
bar  foo  -l
$ ls *
-rw-r--r-- 1 ilkkachu ilkkachu 0 Nov  3 15:10 bar
-rw-r--r-- 1 ilkkachu ilkkachu 0 Nov  3 15:10 foo

必要な問題はそれである。シェルワイルドカードを拡張し、例えばlsパラメータを見ると、-lそれがファイル名のワイルドカードから来たのか、それともユーザーが自分で作成したのかを知る方法はありません。

上記で呼び出されたファイルは長いリストに切り替わり-lます。lsこれらのファイル名を使用するとinvalid optionエラーが発生する可能性があります。またはコマンドがあり、rmファイル名が-rf

これは、ファイル名に対するUnixシステムの緩い態度を間違いなく「間違って」作る要因の1つに過ぎません。詳細については、David Wheelerによって書かれて記事をチェックしてください。

答え2

ドットスラッシュ構造は「filenameスクリプトとして実行」されません。これは、「現在のディレクトリで検索」というシェル(または入力を解釈する他のプログラム)のコマンドです。コマンドが現在の作業ディレクトリにあり、現在の作業ディレクトリが検索パスにない場合は、通常、コマンド(バイナリまたはスクリプト)の前に追加されます。qpdf例のように、コマンドでこれを使用することは、コマンドを呼び出したディレクトリに出力ファイルを配置したい場合に別のディレクトリからソースファイルをインポートする方法です。

関連情報