web-dev-qa-db-ja.com

コマンド引数としてダッシュ「-」で始まるファイル名を使用するにはどうすればよいですか?

これは簡単な質問かもしれませんが、コマンドラインプログラムで「-」で始まるファイルを使用するにはどうすればよいですか。

たとえば、-2013-01-01.pdfという名前のファイルでpdfgrepを使用しようとしていますが、2、0、1、3などに対してオプションが定義されていないという不満があります。

ファイル名を「-」で始まらない名前に変更すると解決しますが、ファイルは私が作成したものではないため、これはオプションではありません。私は、来ているとわかっている特定の変更を確認したいだけです。

20
Kristoffer

非常に頻繁に--がコマンドラインで使用され、使用可能なコマンドスイッチがこれ以上使用されないことをプログラムに通知します。これは、ファイルにダッシュが含まれており、プログラムがオプションとして解釈しようとする場合に特に便利です。

  1. --がないと、エラーが生成されます:

    $ 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'
    
  2. --を使用すると、コマンドが成功します。

    $ 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.
    
  3. pdfgrep--を理解するようにプログラムされており、次のコマンドライン引数がオプションではないことを意味します。ほとんどのプログラムは同じことを行いますが、すべてのプログラムが--を理解するわけではありません。サポートしていないプログラムの場合、解決策は次のようにファイル名の先頭に./を追加することです。

     pdfgrep -i posix ./-find.pdf ./-xorg.pdf
    

    何らかの理由でコマンドがパスを受け入れることができず、純粋なファイル名のみを受け入れない限り、これはどのコマンドでも機能するはずです。

コマンドラインの一般的な概要については、 この便利なPDF を参照してください。

22
user76204

ファイル名の前に./(または動作する別の相対パスまたは絶対パス)を追加します。このように、ポータブルです。

例:

for zefile in ./*.tmp
do
   rm -f "$zefile"
done

オプションの終わりを示すために--を使用することは常に利用できるとは限りません。一部のコマンドはそれを認識しますが、一部は認識しません。そして、これは異なるシステム間で変わります。そのため、最終的には移植性が低下します。

16
Olivier Dulac