Розміщення параметрів командного рядка в bash


3

Я тільки почав використовувати Mac, і мені було засмучено, що потрібні параметри командного рядка відразу після команди, щоб це працювало:

ls -la /usr

але це не так:

ls /usr -la

ls: -la: No such file or directory

Чи є спосіб змінити це? Або хтось може мені сказати, чому розміщення параметрів є агностичним на більшості платформ Linux, але не на Mac?


Він залежить від Linux і, мабуть, має відношення до того, чи використовує певна команда GNU "гетарги". У цьому прикладі "ls" дійсно буде працювати з параметром параметра після імені файлу чи каталогу.

Відповіді:


1

Linux використовує інструменти GNU. OS X використовує інструменти BSD. Інструменти BSD набагато більш вибагливі щодо порядку та наявності аргументів командного рядка.


1

Обробка командного рядка визначається у вихідному коді програми, яка стала конкретною командою.

Найчастіше, група команд використовує певну бібліотеку обробки командного рядка (GNU getargs, або у випадку Perl-скриптів GetOpts :: Long є прикладами таких), хоча те, чи була обробка командного рядка вручну, чи використовувалася якась конкретна бібліотека повністю залежить від команди.

Отже, можливості обробки командного рядка (наприклад, підтримка переупорядкування, використання --для розмежування кінця прапорів, складання -a -bв -abтощо) повністю залежать від вихідного коду окремих додатків та / або бібліотек, які вони використовують.

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


0

Причини, ймовірно, полягають у бібліотеках обробки командних рядків, але якщо мені доведеться здогадуватися про мотивацію бібліотек із строгим упорядкуванням, це нав'язувати послідовність. Спочатку названі параметри, потім позиційні параметри. Після того, як буде накладена послідовність, це полегшує розумовий розбір командних рядків.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.