Odpowiedzi:
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ę.
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:
cat /etc/passwd /etc/group
cat /etc/group /etc/passwd
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.
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.
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):
SYNOPSIS
cat [OPTION] [FILE]...
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):
SYNOPSIS
gcc [-c|-S|-E] [-std=standard]
[-g] [-pg] [-Olevel]
[-Wwarn...] [-pedantic]
[-Idir...] [-Ldir...]
[-Dmacro[=defn]...] [-Umacro]
[-foption...] [-mmachine-option...]
[-o outfile] [@file] infile...
Only the most useful options are listed here; see below for the remainder. g++ accepts mostly
the same options as 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.
gcc -c -O hello.c
Ale jak już wiesz, skoro inni pracują ... gra się bardzo bezpiecznie :)
-static-libstdc++
?
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ć.