ダッシュファイルを読み取る方法


15

どのように私はそれを区切る以外の端末からダッシュファイルを読み込むことができます ./

たとえば読み取るために- file、我々はそれをすることによって読むことができます

cat ./-file_name

Q:同じことを達成するための代替方法はありますか?


4
推奨される方法は、実際には./プレフィックスを使用することです。最も移植性が高い(usenet時代のUnix FAQを参照)
オリビエデュラック

find . -name "-filename" | xargs catパイプを介して./-filenameを送信します。あなたの(単純化された?)の場合は間違いですが、大きなディレクトリ/スクリプトで役立つかもしれません。
ウォルター

回答:


11

stdinから入力を取得するコマンドの場合、リダイレクトを使用できます。

cat <-file_name

yaこれは動作します:)ですので、。
vidhan

22

二重の使用--オプションの終わりをマークします:

cat -- -<FILENAME>

以下のような他のプログラムにはtouchrmあるいはgit checkoutまた、この規則に従ってください:

$ touch -- -file
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:13 -file
$ echo hi! >> -file
$ cat -- -file
hi!
$ rm -- -file
$ echo $?
0

警告:それは常に使うようにするとよいでしょう--rmスクリプトインチ 攻撃者は置くことができ--rf、ディレクトリ内のファイルをし、rm *実行パラメータとしてそれを取るだろう。これを参照してください。

$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm *
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:21 -rf

おっと、これは、我々はディレクトリを削除したくなかった、ことを意味するものではないです。私たちは、使用している必要があります--

$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm -- *
rm: cannot remove `dir': Is a directory
$ ll
total 4.0K
drwxr-xr-x 2 ja ja 4.0K Mar 10 13:22 dir

3
すべてのプログラムを実装することを期待することはできません--:多くのプログラムがすべてではありません。
グレンジャックマン

2
本当に?すべてのプログラムが実装しているとは言いませんでしたが--、そういうものをいくつか示しました。
アルカディウスドラブチク

1
@vidhan:他のオプションを認識していません。
はArkadiusz Drabczyk

1
@vidhanは、理由もなく人生を複雑にし、次のようなことをすることもできますfind . -name '-file_name' -exec cat {} \;が、実際にはあまり意味がありません。
terdon

2
ファイルに名前が付けられ-ていて他に何もない場合、これは機能しませんか?これは、ウォーゲームで登場しました:overthewire.org/wargames/bandit/bandit2.html
ThisClark

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