Порядок опций команды в вопросе Linux?

Например, когда я вошел также:

gcc -O hello.c -c

Или

gcc hello.c -c -O

Оба не жаловались.

Порядок вопроса опций команды?

14
задан 07.02.2010, 03:15

4 ответа

Это зависит от самой программы; операционная система не диктует, имеет ли порядок значение.

Набор GCC опций так колоссален, что я не могу сказать ни с какими полномочиями, если можно предоставить какую-либо опцию в произвольном порядке; необходимо будет прочитать документацию для той опции. Тем не менее общее эмпирическое правило - это, если у Вас есть две или больше взаимоисключающих опции (такой как -O1 -O2 для отличающихся уровней оптимизации), программы будут обычно выбирать более поздние варианты по более ранним. Снова, это не осуществляется Linux.

Простая программа, которая действительно позволяет Вам указать большинство опций в любом порядке, была бы ls. Список всех файлов в текущем каталоге с деталью может быть сделан с также ls -la, ls -al или ls -l -a. Однако ls-l1 (который является 'el' 'один') не дает тот же вывод как ls-1l ('один' 'l'). Это взаимоисключающие опции и последнее, перечисленное по поездкам данное первое.

Существует также нечетная программа, которая применяет опции к аргументам, когда они прибывают. Так, например, у Вас могла бы быть гипотетическая команда blah -a 1 2 -b 3 где -a относится ко всем трем аргументам, но -b только относится 3.

Снова, это до отдельной рассматриваемой программы. Если Вы когда-либо не уверены, прочитайте документацию.

18
ответ дан 07.12.2019, 11:14

Существуют случаи, где порядок параметров командной строки имеет значение даже в GCC. Если Вы связываетесь со статическими библиотеками (.a), то, если Вы указываете -llib1 -llib2 и существует функция в liblib2.a это вызывает функцию в liblib1.a это не было принесено в программу, затем ссылка перестанет работать с неразрешенным символом. С общими библиотеками это не проблема.

В целом, как другие сказали, порядок опций может или не может иметь значения. Однако вывод от двух команд ниже отличается - так порядок аргументов cat изменяет вывод:

cat /etc/passwd /etc/group
cat /etc/group  /etc/passwd

Обратите внимание также на это на Linux (в особенности), GNU getopt() склонно переупорядочить командную строку так, чтобы все опции (запускающийся с минус) были обработаны перед любым из других аргументов - если Вы не используете двойного тире -- отметить конец аргументов, или если Вы не устанавливаете переменную среды POSIXLY_CORRECT.

5
ответ дан 07.12.2019, 11:14

Трудно уже для знания как другой сказанный Вы это может иметь значение (или не).

Хорошее эмпирическое правило состоит в том, чтобы открыть страницу справочника и посмотреть на первый пример и использование, которые заказывают при помещении аргумента там.

Таким образом, если мы смотрим на команду кошки (кошка человека):

SYNOPSIS
       cat [OPTION] [FILE]...

Это походит, пока все опции перед файлом args необходимо быть в порядке.

И если мы смотрим на gcc зверя (человек 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.

Не то, чтобы простой понять как команда :) кошки

Но если требуется избежать рискованных действий,-c, кажется, прибывает, прежде-O и затем infile (hello.c), кажется, является последним.

gcc -c -O hello.c

Но поскольку Вы уже знаете, так как другие работают..., это играет его очень безопасный :)

3
ответ дан 07.12.2019, 11:14

Только если у Вас есть 2 опции, которые являются взаимоисключающими. Иначе порядок не имеет значения.

Конечно, это может варьироваться в зависимости от того, как программа была записана, но должна относиться, все нормальные *отклоняют инструменты.

4
ответ дан 07.12.2019, 11:14

Теги

Похожие вопросы