Na przykład, kiedy wpisałem:
gcc -O hello.c -c
Lub
gcc hello.c -c -O
Obaj nie narzekali.
Czy kolejność opcji poleceń ma znaczenie?
źródło
Na przykład, kiedy wpisałem:
gcc -O hello.c -c
Lub
gcc hello.c -c -O
Obaj nie narzekali.
Czy kolejność opcji poleceń ma znaczenie?
To zależy od samego programu; system operacyjny nie decyduje, czy zamówienie ma znaczenie.
Zestaw opcji GCC jest tak kolosalny, że nie mogę powiedzieć żadnej władzy, czy możesz podać dowolną opcję w dowolnej kolejności; musisz przeczytać dokumentację dotyczącą tej opcji. To powiedziawszy, ogólna ogólna zasada jest taka, że jeśli masz dwie lub więcej wzajemnie wykluczających się opcji (np. -O1 -O2
Dla różnych poziomów optymalizacji), programy zazwyczaj przyjmą późniejsze opcje niż wcześniejsze. Ponownie, nie jest to wymuszone przez Linux.
Byłby to prosty program, który pozwala określić większość opcji w dowolnej kolejności ls
. Listowanie wszystkich plików w bieżącym katalogu ze szczegółami można wykonać za pomocą albo ls -la
, ls -al
albo ls -l -a
. Jednak ls-l1 (czyli „el” „one”) nie daje takiego samego wyniku, jak ls -1l („jeden” „l”). Są to wzajemnie wykluczające się opcje, a ostatnie wymienione powyżej jeżdżą na pierwszym podanym.
Istnieje również program nieparzysty, który stosuje opcje do argumentów po ich przybyciu. Na przykład możesz mieć hipotetyczne polecenie, blah -a 1 2 -b 3
które -a
dotyczy wszystkich trzech argumentów, ale -b
dotyczy tylko 3
.
Ponownie, to zależy od danego programu. Jeśli nie masz pewności, przeczytaj dokumentację.
ls -al path/to/dir
jest poprawny, alels path/to/dir -al
nie jest. Tak więcls
, musisz umieścić swoje opcje przed (opcjonalnym) katalogiem, którego zawartość chcesz wyświetlić.Są przypadki, w których kolejność opcji wiersza poleceń ma znaczenie nawet w GCC. Jeśli łączysz się z bibliotekami statycznymi (.a), to jeśli określisz
-llib1 -llib2
i istnieje funkcja,liblib2.a
która wywołuje funkcję,liblib1.a
która nie została wprowadzona do programu, wówczas połączenie zakończy się niepowodzeniem z nierozwiązanym symbolem. W przypadku bibliotek współdzielonych nie stanowi to problemu.Ogólnie, jak powiedzieli inni, kolejność opcji może, ale nie musi, mieć znaczenie. Jednak dane wyjściowe z dwóch poniższych poleceń są różne - więc kolejność argumentów
cat
zmieniających dane wyjściowe:Zauważ również, że w Linuksie (w szczególności) GNU
getopt()
może zmienić kolejność wiersza poleceń, tak aby wszystkie opcje (zaczynające się od minus) były przetwarzane przed dowolnym innym argumentem - chyba że użyjesz podwójnego myślnika--
do oznaczenia końca argumenty lub chyba, że ustawisz zmienną środowiskową POSIXLY_CORRECT.źródło
Tylko jeśli masz 2 opcje, które wzajemnie się wykluczają. W przeciwnym razie kolejność nie ma znaczenia.
Oczywiście może się to różnić w zależności od tego, jak program został napisany, ale powinno mieć zastosowanie do wszystkich normalnych narzędzi * nix.
źródło
Trudno to wiedzieć, jak już inni mówili, może to mieć znaczenie (lub nie).
Dobrą zasadą jest otwarcie strony podręcznika i spojrzenie na pierwszy przykład i użycie tej kolejności przy wstawianiu arg.
Więc jeśli spojrzymy na polecenie kota (człowiek kot):
Wygląda na to, że dopóki wszystkie opcje są przed argumentem pliku, powinieneś być w porządku.
A jeśli spojrzymy na bestię gcc (man gcc):
Nie jest to tak proste, jak polecenie kota :)
Ale jeśli chcesz grać bezpiecznie, wydaje się, że -c pojawia się przed -O, a następnie infile (hello.c) jest ostatnim.
Ale jak już wiesz, skoro inni pracują ... gra się bardzo bezpiecznie :)
źródło
-static-libstdc++
?