Der empfohlene Weg ist eigentlich, ./Präfix zu verwenden . Es ist das portabelste (vgl. Die Unix-FAQ der Usenet-Ära)
Olivier Dulac
find . -name "-filename" | xargs catwird ./-Dateiname durch die Pipe senden. Für Ihren (vereinfachten?) Fall ein Fehler, aber es könnte in großen Verzeichnissen / Skripten helfen.
Walter A
Antworten:
11
Für Befehle, die von stdin eingegeben werden, können Sie die Umleitung verwenden:
ya dieses funktioniert :) ist also ich habe 3 Möglichkeiten, sie zu lesen, indem ich ./ anderes benutze - und ein anderes, indem ich <benutze, irgendwelche weiteren Möglichkeiten, um dasselbe zu tun ??
Vidhan
22
Verwenden Sie double --, um das Ende der Optionen zu markieren:
cat ---<FILENAME>
Andere Programme wie touch, rmoder git checkoutfolgen auch dieser Konvention:
$ touch ---file
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:13-file
$ echo hi!>>-file
$ cat ---file
hi!
$ rm ---file
$ echo $?0
WARNUNG: Es wird empfohlen, in Skripten immer --after rmzu verwenden. Ein Angreifer könnte eine --rfDatei in einem Verzeichnis rm *ablegen und als Ausführungsparameter verwenden. Sieh dir das an:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch ---rf
$ rm *
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:21-rf
Ups, das ist nicht gemeint, wir wollten keine Verzeichnisse entfernen. Wir hätten verwenden sollen --:
$ 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
Man kann sich nicht auf jede Programmimplementierung verlassen --: Viele tun es, aber nicht alle.
Glenn Jackman
2
"Ja wirklich?" Ich habe nicht gesagt, dass alle Programme implementiert werden --, ich habe gesagt, dass einige das tun.
Arkadiusz Drabczyk
1
@vidhan: Mir ist keine andere Option bekannt.
Arkadiusz Drabczyk
1
@vidhan Sie können Ihr Leben auch ohne Grund komplizieren und so etwas tun, find . -name '-file_name' -exec cat {} \;aber es gibt wirklich nicht viel Sinn.
terdon
2
Dies funktioniert nicht, wenn die Datei benannt ist -und sonst nichts? Dies ist im Wargame aufgetaucht
./
Präfix zu verwenden . Es ist das portabelste (vgl. Die Unix-FAQ der Usenet-Ära)find . -name "-filename" | xargs cat
wird ./-Dateiname durch die Pipe senden. Für Ihren (vereinfachten?) Fall ein Fehler, aber es könnte in großen Verzeichnissen / Skripten helfen.Antworten:
Für Befehle, die von stdin eingegeben werden, können Sie die Umleitung verwenden:
quelle
Verwenden Sie double
--
, um das Ende der Optionen zu markieren:Andere Programme wie
touch
,rm
odergit checkout
folgen auch dieser Konvention:WARNUNG: Es wird empfohlen, in Skripten immer
--
afterrm
zu verwenden. Ein Angreifer könnte eine--rf
Datei in einem Verzeichnisrm *
ablegen und als Ausführungsparameter verwenden. Sieh dir das an:Ups, das ist nicht gemeint, wir wollten keine Verzeichnisse entfernen. Wir hätten verwenden sollen
--
:quelle
--
: Viele tun es, aber nicht alle.--
, ich habe gesagt, dass einige das tun.find . -name '-file_name' -exec cat {} \;
aber es gibt wirklich nicht viel Sinn.-
und sonst nichts? Dies ist im Wargame aufgetauchtAlternativen werden komisch:
quelle