Соображения при создании интерфейса командной строки - PullRequest
3 голосов
/ 03 сентября 2010

Существует множество лучших практик GUI. Я ищу лучшие практики при разработке программы командной строки.

Например, если я создавал программу резервного копирования, что лучше?

Рассмотрение 1, вызов:

program.exe резервная копия

program.exe / backup

program.exe -backup

program.exe --backup

Рассмотрение 2, параметры:

program.exe резервная копия "C: \ file1.txt", "C: \ file1.bak" (неявный источник и место назначения)

program.exe резервная копия - источник "C: \ file1.txt" - место назначения "C: \ file1.bak" (явное)

program.exe backup -source "C: \ file1.txt" "C: \ file2.txt" "C: \ file3.txt" -destination "C: \ files.bak" (несколько источников)

program.exe backup -source "C: \ file1.txt" -source "C: \ file2.txt" -source "C: \ file3.txt" -destination "C: \ files.bak" (несколько источников альтернативный синтаксис)

Рассмотрение 3, цепочка:

program.exe резервная копия "C: \ file1.txt", "C: \ file1.bak", резервная копия "C: \ file2.txt", "C: \ file2.bak" (это должно быть разрешено?)

Рассмотрение 4, набрав экономию:

program.exe резервная копия

program.exe bkp

program.exe b (все ли это псевдонимы одной и той же команды?)

Ответы [ 7 ]

2 голосов
/ 03 сентября 2010

Я всегда предпочел бы, что это (в порядке важности от большинства к наименьшему):

  • Наиболее понятно конечному пользователю
  • Наименее неоднозначно
  • Следуетусловные обозначения платформы, кодируемой для
  • Проще всего разобрать в моем коде

Так что в Windows я бы выбрал / в качестве префикса (следует условным обозначениям), /source и /destination (наиболее понятный и наименее неоднозначный) и не допускают объединения в цепочку, что усложняет синтаксический анализ, поэтому:

program.exe / backup / source: "c: \ source" /destination: "c: \ destination"

Любые средства также разрешают сокращенные версии имен параметров, так что вы можете разрешить сокращение вышеизложенного до:

program.exe / b / s: "c: \ source" / d: "c: \ destination"

Но не делайте это более загадочным, чем это.Кроме того, включите параметр /?, который можно использовать для отображения синтаксиса вашей программы.Как указал Peter M в комментариях к моему ответу, было бы неплохо сделать то же самое, что и /?, когда пользователь вызывает вашу программу без указания каких-либо параметров.Нет ничего менее полезного и более бесполезного, чем запуск программы CLI и получение:

Имя программы v1.01

Параметры не указаны, для справки используйте /?

Еще одна важная вещь, которую следует рассмотреть, связанная с конечной точкой: не изобретать велосипед .Существует бесчисленное множество анализаторов командной строки, посмотрите на ответы на на этот вопрос для начальной точки (если вы используете C # для Windows). Не выполняйте посредственную работу, выполняя то, что кто-то другой уже проделал хорошую работу .

1 голос
/ 03 сентября 2010

В общем, вы должны оставаться в рамках соглашений платформы. К сожалению, Microsoft Windows была довольно непоследовательна в отношении интерфейсов командной строки! Поэтому вы должны быть одинаково непоследовательны. Я думаю, что идеальная модель в этом случае - классно несовместимая dd:

dd if=C:\file1.txt of=C:\file2.bak

Нет ничего более похожего на это.

1 голос
/ 03 сентября 2010
  • Разрешить --long-option-name и -lon для необязательных параметров.
  • Создать backup.exe вместо использования backup в качестве команды для program.exe.
  • Использовать стандартныеввод и стандартный вывод в качестве файлов ввода и вывода по умолчанию.
  • Использовать текущий каталог в качестве расположения по умолчанию для операций.

Это для общих правил UNIX / Linux.Для Windows они совершенно разные.

  • Не используйте /source и /destination.Вообразите, черт возьми, это было бы, если бы cp (copy) требовало этого.
1 голос
/ 03 сентября 2010

Определенно параметры и ключ / Help для объяснения использования.Так что у конечного пользователя есть свобода, какой параметр ставить первым и, следовательно, не устанавливать конкретный порядок параметров

1 голос
/ 03 сентября 2010

Я предпочитаю использовать двойные тире для длинных имен в дополнение к коротким формам, эквивалентным одному символу, с одиночными тире.

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

Так, например, для поддержки резервного копирования:

  program.exe --backup   
  program.exe -b 

И для восстановления поддержки обоих:

  program.exe --restore "5/6/2010"
  program.exe -r "5/6/2010"

Для справочной поддержки обоих:

  program.exe --help
  program.exe -h
0 голосов
/ 03 сентября 2010

Я рекомендую найти библиотеку, которая позволит вам определить параметры командной строки и правильно их проанализировать, а также распечатать инструкции по использованию, которые определяют все ваши параметры для пользователей вашего приложения. Должно быть много библиотек с открытым исходным кодом, доступных для разных языков и платформ.

0 голосов
/ 03 сентября 2010

Ну, для начала я бы отказался от синтаксиса program.exe и просто пошел бы на backup.exe

Мне самому нравится синтаксис /option:<value>. Я бы, наверное, хотел бы иметь возможность:

backup /d:"c:\mydirectory" /o:"c:\mybackup.bak"
backup /f:"c:\mydiredctory\myfile.txt" /o:"c:\mybackup.bak"
backup /f:"mydiredctory\myfile.txt,mydiredctory\myfile2.txt" /o:"c:\mybackup.bak"
...