3

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

ls -la /usr

но это не так:

ls /usr -la

ls: -la: Нет такого файла или каталога

Есть ли способ изменить это? Или кто-то может сказать мне, почему размещение опций не зависит от большинства платформ Linux, но не от Mac?

3 ответа3

1

Linux использует инструменты GNU. OS X использует инструменты BSD. Инструменты BSD гораздо более требовательны к порядку и наличию аргументов командной строки.

1

Обработка командной строки определяется в исходном коде программы, которая стала конкретной командой.

Чаще всего куча команд использует определенную библиотеку обработки командной строки (GNU getargs, или в случае сценариев Perl GetOpts::Long являются примерами таких), хотя независимо от того, выполнялась ли обработка командной строки вручную или использовалась какая-либо конкретная Библиотека полностью зависит от команды.

Поэтому возможности обработки командной строки (например, поддержка переупорядочения, использование -- для определения конца флагов, свертывание -a -b в -ab и т.д.) Полностью зависят от исходного кода отдельных приложений и / или библиотеки, которые они используют.

Конкретный шаблон, который вы отметили, вероятно, связан с различными библиотеками обработки командной строки (или отдельным кодом обработки аргументов, использованным разработчиками вручную) между Linux с его корнями GNU и OSX (IIRC, BSD, но не уверен)

0

Причины, скорее всего, в библиотеках обработки командной строки, но если бы мне пришлось угадывать мотивы библиотек строгого порядка, это навязывать согласованность. Сначала именованные параметры, затем позиционные параметры. Когда согласованность навязана, это облегчает мысленный анализ командных строк.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .