Unixツール:ファイルの名前に何かを付けた場合はどうなりますか?


9

私はいつも不思議に思っています。ほとんどのGNU / Unixツールは、「マイナスの何か」の形でオプションを取り、時には引数が続きます。もし何かマイナスの名前のファイルを手に入れたら?

$ ls
-f
$ rm -f
$ ls
-f
$ mv -f abc
mv: missing destination file operand after `abc'
Try `mv --help' for more information.
$ cat -f
cat: invalid option -- 'f'
Try `cat --help' for more information.

または

$ ls
-ohello.c
$ gcc -ohello -ohello.c
gcc: fatal error: no input files
compilation terminated.

これは好奇心から外れたものです。これの使用例はありません。


文字列 "-f"を文字通りシステムコールに渡す方法を見つける必要があります。通常、それは慎重な脱出によるものです。
フレキソ、2012年

2
「トピックから外れているため」の投票者へ:これはシェルプログラミングと問題を回避する方法に関する質問です。それは完全にSOの話題です。(OTOH、おそらく重複しています。問題は関連する他の質問を見つけることです。)
ジョナサンレフラー

回答:


12

という名前のファイルを削除するには-xrm -- -x--オプションの終わりを意味する)またはを使用しますrm ./-x


10

インタビューの設定でこの種の質問をすることはかなり一般的です。ダッシュを含むファイルを処理する一般的な方法は次のいずれかです。

$ rm -- -f
$ rm ./-f

6

Unixでよくある質問。主な方法は、ファイルのフルパス名を指定することです。そのため、ファイルの前にダッシュがありません。

$ rm -file.txt
unknown option -l

$ rm ./-file.txt    #No problem!
$ rm $PWD/-file.txt #Same thing

一部のコマンドでは、ダッシュを単独で(または2つのダッシュを使用して)オプションを終了できます。ただし、これは必ずしもすべてのコマンドに当てはまるわけではなく、異なるシステムの同じコマンドでも当てはまります。

$ rm -- -file.txt   #Works on Linux but not on some Unix systems

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.