Существуют ли при проектировании интерфейса командной строки предпочтение/эмпирическое правило для использования параметра или подкоманды?

Попробуйте это:

 split --additional-suffix='.lst' -da3 -l 1024 list.lst ''

Причина перехода к9000(для более чем 89 частей )заключается в том, что числовая длина по умолчанию равна 2.

Измените с помощью опции -a. Чтобы нумерация файлов оставалась числовой (и была монотонной (, всегда увеличивайте ))и используйте длину, превышающую максимальное значение возможного количества разбиений.

 $ split -a 3 -d -l1024./list.lst

 $ ls
 list.lst  x009  x019  x029  x039  x049  x059  x069  x079  x089  x099  x109  x119
 x000      x010  x020  x030  x040  x050  x060  x070  x080  x090  x100  x110  x120
 x001      x011  x021  x031  x041  x051  x061  x071  x081  x091  x101  x111  x121
 x002      x012  x022  x032  x042  x052  x062  x072  x082  x092  x102  x112  x122
 x003      x013  x023  x033  x043  x053  x063  x073  x083  x093  x103  x113  x123
 x004      x014  x024  x034  x044  x054  x064  x074  x084  x094  x104  x114  x124
 x005      x015  x025  x035  x045  x055  x065  x075  x085  x095  x105  x115  x125
 x006      x016  x026  x036  x046  x056  x066  x076  x086  x096  x106  x116  x126
 x007      x017  x027  x037  x047  x057  x067  x077  x087  x097  x107  x117  x127
 x008      x018  x028  x038  x048  x058  x068  x078  x088  x098  x108  x118

Чтобы изменить x, просто изменитеPREFFIX(по умолчаниюx)(после имени файла):

 split -a 3 -d -l 1024 list.lst ''

Который будет называть файлы 000. Чтобы получить завершающий .lst, добавьте параметр --additional-suffix='.lst', короче говоря, используйте этот:

 split --additional-suffix='.lst' -da3 -l 1024 list.lst ''

Если вам нужно, чтобы начальное числовое значение было 001, используйте:

 split --additional-suffix='.lst' --numeric-suffixes=1 -a 3 -l 1024 list.lst ''

Но нет, невозможно получить числовые значения, такие как 1,2,3,...,21,..,107 без переименования.

Переименование может решить все проблемы в два этапа с помощью простого цикла:

 split -l 1024 -d -a 8 list.lst
 for f in x[0-9]*; do
     mv "$f" "$((10#${f#x}+1)).lst"
 done
1
06.03.2021, 11:02
1 ответ

Более технический термин для того, что вы называете «словом», — «подкоманда». Довольно часто интерфейс командной строки проектируется как команда с несколькими подкомандами, каждая из которых имеет собственный набор параметров. Иногда подкоманды имеют свои собственные подкоманды. git — один из таких примеров:

git remote add -f -t "$BRANCH_NAME" "$REMOTE_NAME" "git://example.com/repo"

Одна из причин разделения CLI на подкоманды состоит в том, чтобы подчеркнуть, что он может выполнять несколько различных связанных действий. dnfможно installпакеты, removeпакеты, upgradeпакеты, searchдля пакетов, показать infoо пакете и т.д. Все совсем разные действия. Многие из этих действий имеют дополнительные ручки, которые вы можете настроить, и выбор, который вы можете сделать с помощью опций.

Другая причина использования подкоманд заключается в том, что подкоманда предоставляет пространство имен для опций:--allв dnf list --allозначает совершенно другое, чем --allвdnf search --all

Еще одна причина для разделения большого CLI на подкоманды — это документация. Представьте, если бы в git не было подкоманд. Все руководство по git будет состоять из одной ооооооооооооооооооооооооолнной страницы, подробно описывающей все опции, которые есть у git, и отношения между ними. Также :запустите git commit --help-, вы увидите страницу справки, относящуюся к подкоманде commit. Также :установите tldr и запустите tldr git commit-, вы получите шпаргалку, относящуюся к подкоманде commit.

Еще одно соображение состоит в том, что вы не должны не использовать подкоманды, если вы хотите разрешить комбинирование режимов работы, которые они позволяют комбинировать. Вы можете указать несколько параметров в одном вызове команды, но вы можете указать только одну подкоманду.

2
18.03.2021, 22:27

Теги

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