Должен ли я в алфавитном порядке упорядочить флаги в команде в качестве хорошей практики?

14

Я знаю, что эти две команды делают одно и то же:

ls -la
ls -al

но мне интересно, есть ли между ними какие-либо предпочтения. Лучше практиковать, чтобы заказать их определенным образом?

Тим
источник
11
Вам также понадобится эта футболка: redbubble.com/people/digerati/works/… :)
Сергей
@ Сергей Великолепная рубашка!
Терранс

Ответы:

15

На самом деле это не имеет значения *, если в команде не указано иное. Я не встречал упоминаний, в которых бы содержалось что-то вроде указания, как размещать варианты один за другим. Поэтому я думаю, что для удобства чтения варианты могут быть расположены в алфавитном порядке.

* Существует очень и очень важный кавает, который заключается в том, что если какой-либо опции нужно имя файла или любой другой ввод сразу после него, вам нужно указать его соответствующим образом.

Например, -fопция grepпринимает файл в качестве входных данных, чтобы взять шаблон для поиска из входного файла. Вы должны дать команду как, например:

grep -cf input.txt file.txt 

Если вы используете это как:

grep -fc input.txt file.txt 

это потерпит неудачу, поскольку это будет использовать cв качестве имени файла.

heemayl
источник
12

Соглашения POSIX определяют в Руководящих принципах 11 и 12 Руководства по синтаксису служебных программ, что порядок " не должен иметь значения », если он не задокументирован для самой утилиты.

В GNU C Library Reference Manual также отличием этих конвенций POSIX в 25.1.1 Программа Синтаксис аргументов конвенций .

Но обратите внимание, есть несколько утилит, которые в некоторых ситуациях дают строгие указания, как выполнять параметры (например, находить). Из справочной страницы поиска :

-nameИспытание приходит перед -typeиспытанием для того , чтобы избежать того , чтобы звонить stat(2)по каждому файлу.

Иногда утилита жалуется на порядок.

хаос
источник
3
Строго говоря, findесть только несколько опций, POSIX определяет только две опции -Hи -L. У GNU findв Ubuntu есть еще несколько опций, но -typeи -nameт. Д. Считаются операторами , а не опциями . А для операторов порядок обычно имеет значение.
гейра
5

С ls вы вряд ли ошибетесь с упорядочением опций.

Но помните, что другие команды могут иметь разные ответы на опции в зависимости от порядка.

Примером является команда find. Вы получите разные результаты, например, между:

  find . -ls -mtime -1 

И

  find . -mtime -1 -ls
user55570
источник
3

Если то, что вы хотите практиковать, это алфавитные короткие строки, возможно. Я считаю две стратегии полезными: составление слов (уменьшает количество опечаток) и составление предложений (улучшает понимание).

Например, для ls я обычно использую, ls -halFпотому что даже при странной заглавной букве я лучше набираю halF, чем что-то вроде Falh , но это не слово.

Для tar, с другой стороны, я tar czvf filenameнабираю и говорю (в своей голове) «tar Create and Zip, Verbosely For filename», потому что именно так я узнал, что означают разные буквы.

Vynce
источник
Я помню e2fsck -fvcckt, потому что он описывает ситуацию, в которой я могу оказаться, если он возвращает слишком много ошибок. ;)
Джо
2

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

Но это предпочтительнее варианта заказа по алфавиту спорен.

Лично я считаю, что мнемоника обеспечивает большую ценность, чем строгий алфавитный порядок. Проще запомнить набор опций, когда они образуют запоминающееся слово, например, рассмотрим:

netstat -tan
# alphabetic is good (by chance) in this case
netstat -ant

против:

netstat -atn
netstat -nta

Поэтому, если вы обнаружите, что повторяете определенную комбинацию параметров для команды, вы можете попытаться изменить порядок букв в порядке, который вам будет проще запомнить.

arielf
источник