zalecanym sposobem jest użycie ./prefiksu. Jest najbardziej przenośny (por. Często zadawane pytania dotyczące uniksowej ery usenetu)
Olivier Dulac,
find . -name "-filename" | xargs catwyśle ./- nazwa pliku przez potok. W twoim przypadku (uproszczonym?) Pomyłka, ale może to pomóc w dużych katalogach / skryptach.
Walter A
Odpowiedzi:
11
W przypadku poleceń otrzymujących dane wejściowe ze standardowego wejścia można użyć przekierowania:
tak, ten działa :) jest więc mam 3 sposoby, aby je odczytać za pomocą ./ innych za pomocą - i innego za pomocą <, jeszcze więcej sposobów na zrobienie tego samego ??
vidhan
22
Użyj podwójnie, --aby zaznaczyć koniec opcji:
cat ---<FILENAME>
Inne programy, takie jak te touch, rmlub git checkoutteż przestrzegają tej konwencji:
$ touch ---file
$ ll
total 0-rw-r--r--1 ja ja 0Mar1013:13-file
$ echo hi!>>-file
$ cat ---file
hi!
$ rm ---file
$ echo $?0
UWAGA: Jest to dobra praktyka, aby zawsze używać --po rmw skryptach. Osoba atakująca może umieścić --rfplik w katalogu i rm *potraktować go jako parametry uruchamiania. Zobacz:
$ 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, nie o to nam chodziło, nie chcieliśmy usuwać katalogów. Powinniśmy użyć --:
$ 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
Nie możesz liczyć na wdrożenie każdego programu --: wiele z nich robi, ale nie wszystkie.
glenn jackman
2
Naprawdę? Nie powiedziałem, że wszystkie programy się wdrażają --, powiedziałem, że pokazałem, że to robią.
Arkadiusz Drabczyk
1
@vidhan: nie znam żadnej innej opcji.
Arkadiusz Drabczyk
1
@vidhan możesz również skomplikować swoje życie bez powodu i zrobić coś takiego, find . -name '-file_name' -exec cat {} \;ale tak naprawdę nie ma to większego sensu.
./
prefiksu. Jest najbardziej przenośny (por. Często zadawane pytania dotyczące uniksowej ery usenetu)find . -name "-filename" | xargs cat
wyśle ./- nazwa pliku przez potok. W twoim przypadku (uproszczonym?) Pomyłka, ale może to pomóc w dużych katalogach / skryptach.Odpowiedzi:
W przypadku poleceń otrzymujących dane wejściowe ze standardowego wejścia można użyć przekierowania:
źródło
Użyj podwójnie,
--
aby zaznaczyć koniec opcji:Inne programy, takie jak te
touch
,rm
lubgit checkout
też przestrzegają tej konwencji:UWAGA: Jest to dobra praktyka, aby zawsze używać
--
porm
w skryptach. Osoba atakująca może umieścić--rf
plik w katalogu irm *
potraktować go jako parametry uruchamiania. Zobacz:Ups, nie o to nam chodziło, nie chcieliśmy usuwać katalogów. Powinniśmy użyć
--
:źródło
--
: wiele z nich robi, ale nie wszystkie.--
, powiedziałem, że pokazałem, że to robią.find . -name '-file_name' -exec cat {} \;
ale tak naprawdę nie ma to większego sensu.-
i nic więcej? To pojawiło się w grze: overthewire.org/wargames/bandit/bandit2.htmlAlternatywy stają się dziwne:
źródło