Wiem, że rm -f file1
to siłą usunie file1
bez monitowania mnie.
Wiem również, że rm -i file1
najpierw wyświetli monit przed usunięciemfile1
Teraz, jeśli wykonasz rm -if file1
, to również wymusi usunięcie file1
bez monitowania mnie.
Jeśli jednak wykonasz rm -fi file1
polecenie, wyświetli się monit przed usunięciem file1
.
Czy to prawda, że łącząc opcje poleceń, ta ostatnia będzie miała pierwszeństwo? jak rm -if
, wtedy -f
będzie miało pierwszeństwo, ale rm -fi
wtedy -i
będzie miało pierwszeństwo.
ls
Komenda na przykład, to nie ma znaczenia, jeśli powiedział ls -latR
lub ls -Rtal
.
Myślę, że to ma znaczenie tylko wtedy, gdy masz sprzeczne opcje poleceń rm -if
, czy to prawda?
command-line
rm
command
options
alkabary
źródło
źródło
Odpowiedzi:
W przypadku korzystania
rm
z obu opcji-i
i-f
pierwsza z nich zostanie zignorowana. Jest to udokumentowane w standardzie POSIX :a także na
info
stronie GNU :Zobaczmy, co dzieje się pod maską:
rm
Procesy swojej opcji zgetopt(3)
konkretniegetopt_long
. Ta funkcja przetwarza argumenty opcji w wierszu poleceń (**argv
) w kolejności ich wyświetlania:Ta funkcja jest zwykle wywoływana w pętli, dopóki wszystkie opcje nie zostaną przetworzone. Z tej perspektywy funkcje są przetwarzane w kolejności. To, co faktycznie się dzieje, zależy jednak od aplikacji, ponieważ logika aplikacji może wykrywać sprzeczne opcje, zastępować je lub wyświetlać błąd. W przypadku
rm
ii
orazf
opcje doskonale się nadpisują. Odrm.c
:Obie opcje ustawiają te same zmienne, a stan tych zmiennych będzie zależał od tego, która opcja będzie ostatnia w wierszu poleceń. Efekt tego jest zgodny ze standardem POSIX i
rm
dokumentacją.źródło
rm
). Wydaje mi się, że polecenie rzadko przyjmuje pierwsze ustawienie opcji i ignoruje argumenty, które zmieniłyby już ustawioną opcję.Tak, ponieważ
rm
jest to ważne. Jeśli ostatnia opcja zastępuje poprzednie, zależy to jednak od samego programu. Od „info rm”Jako ogólna wskazówka:
info
zwykle jest bardziej szczegółowa niżman
, która sama w sobie jest zwykle bardziej szczegółowa niż--help
opcja.źródło
Nie ma „pierwszeństwa” dla flag, każdy program obsługuje je tak, jak chce. Większość stara się zebrać wszystkie flagi i sprawdzić konflikty, w przypadku standardowych narzędzi (takich jak odnośniki
rm(1)
) odpowiednie standardy mogą wymagać czegoś (ale z drugiej strony, Twoja konkretna wersja może być niechlujna w interpretacji narożnych przypadków standardu / nie zostać specjalnie przetestowana dla nich).Dla programisty piszącego program najłatwiej jest rozważyć argumenty (flagi i inne) w ścisłej kolejności od lewej do prawej, a być może wyskoczyć przy trafieniu w jakąś przeszkodę. Jeśli używasz biblioteki do obsługi flag (np.
getopt(3)
Istnieje kilka wersji unoszących się wokół), programista prawdopodobnie robi to, co przychodzi najłatwiej / naturalniej. Programiści to ludzie, ludzie są leniwi (a przynajmniej nie lubią myśleć przez kombinatoryczną eksplozję).źródło