Bałam się w terminalu na Red Hat Linux, a kiedy wpisałem gwiazdkę ( *
), a następnie return, wykonałem jeden z programów w moim katalogu. Czemu?
Domyślam się, że Unix potraktował go jako symbol wieloznaczny, więc wykonał pierwszy program alfabetyczny. Ponieważ my_program.exe
i one_of_my_programs.program
można go wykonać po prostu wpisując nazwę pliku, operator znaku zastępczego reprezentuje wszystkie możliwe pliki. Ponieważ program jest najpierw alfabetyczny, Unix go wykonuje. Czy to prawidłowy osąd?
linux
command-line
bash
unix
użytkownik6086585
źródło
źródło
*
alfabetyczną, ale bash to robi.Odpowiedzi:
Twoja interpretacja jest poprawna. Reszta plików zostanie przedstawiona jako lista parametrów.
Zauważ, że zrobi to tylko wtedy, gdy program ma ustawiony bit wykonywalny, a bieżący katalog znajduje się na
PATH
liście.Kilka uwag, które mogą pomóc w zrozumieniu:
./*
wówczasPATH
wpis nie jest to wymóg.. *
lub,. ./*
a pierwszym pasującym plikiem jest skrypt, to nie musi on być wykonywalny ani nie powinien znajdować się w bieżącym kataloguPATH
(może nie być prawdą dla powłok innych niżbash
).źródło
PATH
o takiej samej nazwie jak pierwszy plik, wówczas zostanie wykonane inne polecenie.mkdir foo; cd foo; touch rm xyz; ls; *; ls
.*
jest aliasem.. *
lub. ./*
jednej puszkibash *
(lub dowolnej innej powłoki).To sugeruje, że
.
jest to część twojejPATH
zmiennej. To naprawdę zły pomysł ze względów bezpieczeństwa (naturalnie Windows musiał uczynić go domyślnym niemodyfikowalnym).Jednak ta „sugestia” jest jedynie umiarkowanie poprawna: jeśli masz plik o nazwie
rm
w bieżącym katalogu,*
dobrze będzie wykonać domyślnerm
:Jak widać, nie było go
rm
w bieżącym katalogu (pustym i niewykonywalnym pliku), ale zostało wykonane domyślnie/bin/rm
.Zawsze sprawdzaj dwukrotnie swoje polecenia, gdy w grę wchodzą symbole wieloznaczne. Oto jedna z najbardziej przerażających wiadomości, jakie kiedykolwiek przeczytano:
Jest to wynik połączenia
, mniej więcej najgorsze ustawienie fałszywej przestrzeni, jaką można wymyślić.
źródło
rm()
która dodaje-i
parametry lub sprawdza parametry i prosi o potwierdzenie, czy jest ich więcej niż pewna liczba.mv /tmp/ohno /tmp/ohnoes
( google.fr/search?q=ohnoes&source=lnms&tbm=isch )