これは簡単な質問かもしれませんが、コマンドラインプログラムで「-」で始まるファイルを使用するにはどうすればよいですか。
たとえば、pdfgrep
という名前のファイルで使用しようとしています-2013-01-01.pdf
が、2、0、1、3などに対して定義されたオプションがないと文句を言います。
ファイル名を「-」で始まらない名前に変更すると解決しますが、ファイルは私が作成したものではないため、これはオプションではありません。私は、来ているとわかっている特定の変更を確認したいだけです。
これは簡単な質問かもしれませんが、コマンドラインプログラムで「-」で始まるファイルを使用するにはどうすればよいですか。
たとえば、pdfgrep
という名前のファイルで使用しようとしています-2013-01-01.pdf
が、2、0、1、3などに対して定義されたオプションがないと文句を言います。
ファイル名を「-」で始まらない名前に変更すると解決しますが、ファイルは私が作成したものではないため、これはオプションではありません。私は、来ているとわかっている特定の変更を確認したいだけです。
回答:
--
コマンドラインで非常に頻繁に使用され、使用可能なコマンドスイッチがもう使用されないことをプログラムに通知します。これは、ファイルにダッシュが含まれており、プログラムがオプションとして解釈しようとする場合に特に便利です。
がなければ、--
エラーが生成されます:
$ pdfgrep -i posix -find.pdf -xorg.pdf
pdfgrep: invalid option -- 'f'
pdfgrep: invalid option -- 'd'
pdfgrep: invalid option -- '.'
pdfgrep: invalid option -- 'p'
pdfgrep: invalid option -- 'd'
pdfgrep: invalid option -- 'f'
で--
使用され、我々は成功したコマンドがあります。
$ pdfgrep -i posix -- -find.pdf -xorg.pdf
-find.pdf: on the command line. Currently-implemented types are emacs (this is the default), posix-awk,
-find.pdf: posix-basic, posix-egrep and posix-extended.
-find.pdf: posix-basic, posix-egrep and posix-extended.
-find.pdf: posix-basic, posix-egrep and posix-extended.
pdfgrep
--
次のコマンドライン引数はオプションではないことを意味するようにプログラムされています。ほとんどのプログラムは同じことを行いますが、すべてのプログラムが理解できるわけではありません--
。そうでないプログラムの場合、解決策は次の./
ようにファイル名の先頭にを追加することです:
pdfgrep -i posix ./-find.pdf ./-xorg.pdf
何らかの理由でコマンドがパスを受け入れることができず、純粋なファイル名のみを受け入れない限り、これはどのコマンドでも機能するはずです。
コマンドラインの一般的な紹介については、この便利なPDFを参照してください。
--
通常の回避策を置くことで./
、ファイルの前に:pdfgrep ./-2013-01-01.pdf
./
前面に置くことが最もポータブルで堅牢なソリューションです。任意のプログラム、任意のUNIXバージョンで動作します。
ファイル名の前に ./
(または機能する別の相対パスまたは絶対パス)を追加します。このように、ポータブルです。
例:
for zefile in ./*.tmp
do
rm -f "$zefile"
done
使用--
オプションの終わりを示すためには、常に利用可能ではありません。一部のコマンドはそれを認識しますが、一部は認識しません。そして、これは異なるシステム間で変わります。そのため、最終的には移植性が低下します。