Линук наредбе

Басх Ксаргс командују на тежи начин као пример

Басх Ксаргс командују на тежи начин као пример
Када тек почнете да учите басх програмирање на тежи начин, нико вам неће рећи о наредби каргс. Од тада сте успели да покупите довољно каргова да бисте прошли без превише ломљења. Сад се запитате - Шта је са свим оним осталим опцијама? Могу ли ја ово?? Шта ако желим .. ?

До сада сте вероватно већ довољно добро разумели како се извршава команда у басх-у. Али шта ако желите да извршавате токове наредби у низу или понекад паралелно? Ту се налазимо помоћу ксарга.

Овде се надамо да ћемо примером одговорити на сва ова питања и више о басх-у и команди каргс.

Шта је каргс у басх?

каргс је спољна команда која се користи за претворити стандардни улаз у аргументе наредбеног ретка то се каже као „проширени аргументи.”Углавном је створен за употребу са наредбама које нису изграђене за руковање цевоводним улазом или стандардним улазом као што су рм, цп, ецхо 1 и друге спољне наредбе које само прихватају аргументе као параметре.

1 Иако већина система долази са ецхо наредбом, ецхо је басх уграђен; То је, осим ако се позива команда ецхо, користи се уграђени ецхо. Слично томе, басх уграђени нису свесни улазних цеви.

Ксаргс опције са басх примерима

Прођимо кроз каргс и његове опције са примерима у басх. Уз конвенционални третман опција наредбеног ретка који се очекују од каргс, опције су груписане по објектима као што су добивање информација или модификовање понашања.

Ксаргс инфо

Ево опција које пружају информације о карговима.

Ксаргс помоћ

каргс --помагање
Употреба: каргс [ОПЦИЈА]… ЗАПОВЕДИ [ИНИЦИЈАЛНИ АРГ]…
Покрените ЦОММАНД са аргументима ИНИТИАЛ-АРГС и више аргумената прочитаних из улаза.
Обавезни и необавезни аргументи дугих опција су такође
обавезно или необавезно за одговарајућу кратку опцију.
-0, --нулл ставке су одвојене нулом, а не размаком;
онемогућава обраду цитата и косе црте и
логичка ЕОФ обрада
-а, --арг-филе = ФИЛЕ чита аргументе из ФИЛЕ, а не стандардни унос
-д, --делимитер = ЦХАРАЦТЕР ставке у улазном току су одвојене ЦХАРАЦТЕР-ом,
не празним простором; онемогућава цитирање и косу црту
обрада и логичка ЕОФ обрада
-Е ЕНД поставља логички ЕОФ низ; ако се ЕНД јавља као линија
уноса, остатак уноса се занемарује
(занемарује се ако је наведено -0 или -д)
-е, --еоф [= ЕНД] еквивалентно -Е ЕНД ако је наведен ЕНД;
у супротном, не постоји стринг на крају датотеке
-И Р исто као --реплаце = Р
-и, --реплаце [= Р] замените Р у ИНИЦИАЛ-АРГС са прочитаним именима
са стандардног улаза; ако је Р неспецификован,
претпоставити
-Л, --мак-линес = МАКС-ЛИНЕС користи највише МАКС-ЛИНЕС непразних улазних линија по
командна линија
-л [МАКС-ЛИНЕС] сличан -Л али подразумевано има највише један не-
празан ред за унос ако МАКС-ЛИНЕС није наведен
-н, --мак-аргс = МАКС-АРГС користи највише МАКС-АРГС аргумената по командној линији
-П, --мак-процс = МАКС-ПРОЦС изводи највише МАКС-ПРОЦС процеса истовремено
-п, --интерацтиве промпт пре покретања команди
--процесс-слот-вар = ВАР поставите променљиву окружења ВАР у подређеним процесима
-р, --но-рун-иф-емпти ако нема аргумената, онда немојте покретати ЦОММАНД;
ако ова опција није дата, ЦОММАНД ће бити
трчи бар једном
-с, --мак-цхарс = МАКС-ЦХАРС ограничава дужину командне линије на МАКС-ЦХАРС
--схов-лимит приказује ограничења дужине наредбене линије
-т, --вербосе команде за штампање пре њиховог извршавања
-к, --излаз излаз ако је величина (види -с) премашена
--помозите приказати ову помоћ и изађите
--верзија избаци информације о верзији и изађи

Погледајте помоћ за каргс као кратку референцу за употребу и опције каргс-а.

Верзија Ксаргс

каргс --верзија
каргс (ГНУ финдутилс) 4.6.0

Ограничења Ксаргс-а

Чак и каргс има своја ограничења. Опција -схов-лимит за каргс приказује ограничења која су каргс користили пре покретања наредби. Стварна ограничења зависе од вашег окружења. Међутим, за већину корисника ово је довољно. Ограничења се могу подесити у командној линији, погледајте примере.

Пример) Ваше окружење каргс ограничења
каргс --схов-лимит
Варијабле вашег окружења заузимају 6234 бајта
ПОСИКС горња граница дужине аргумената (овај систем): 23718
ПОСИКС најмања дозвољена горња граница дужине аргумента (сви системи): 4096
Максимална дужина наредбе коју бисмо заправо могли да користимо: 17484
Величина бафера наредби који заправо користимо: 23718
Максимални паралелизам (--мак-процс не сме бити већи): 2147483647

Извршење каргс-а ће се наставити и сада ће покушати да прочита своје улазне и покрене наредбе; ако ово није оно што сте желели да се догоди, унесите притисак на тастер за крај датотеке.

Упозорење: ехо ће се покренути најмање једном.  Ако не желите да се то догоди, притисните тастер за прекид.

Имајте на уму да је наредба која би се покренула као последица каргс ецхо, подразумевана наредба каргс.

Пример) Ксаргс ограничења са прилагођеним ограничењем међуспремника наредбе
каргс --схов-лимит -с 1
Варијабле вашег окружења заузимају 9479 бајтова
ПОСИКС горња граница дужине аргумената (овај систем): 20473
ПОСИКС најмања дозвољена горња граница дужине аргумента (сви системи): 4096
Максимална дужина наредбе коју бисмо заиста могли да користимо: 10994
Величина међуспремника наредби који заправо користимо: 1
Максимални паралелизам (--мак-процс не сме бити већи): 2147483647

Упозорење: ехо ће се покренути најмање једном.  Ако не желите да се то догоди,
затим притисните тастер за прекид.
каргс: не може да стане један аргумент у ограничење величине листе аргумената

Имајте на уму да ће се грешке појавити на дну следећих Упозорења ако постоје. Имамо грешку „каргс: не може стати у један аргумент унутар ограничења величине листе аргумената“, што само значи да покушавамо да радимо изван дозвољене величине ме успремника наредбе која је постављена на знак.

Међуспремник наредби садржи наредбу коју слиједе сви аргументи, укључујући размаке.
У случају наредбе у овом примеру опције каргс, бафер наредбе је

"одјек"

који садржи 4 знака.
Дакле, треба да поставимо величину међуспремника наредбе на вредност већу или једнаку 5, како следи. Имајте на уму да ће се потрошња међуспремника наредби изједначити са ленгтх_оф_цомманд + ленгтх_аргс_инцлудинг_спацес_плус_оне + 1.

каргс --схов-лимит -с 5

# Не више "каргс: не може да стане један аргумент у ограничење величине листе аргумената" грешка

Али шта ако наша команда има аргументе?

да | каргс -т --схов-лимит -т -с 6 # ће се покретати са следећим излазом
ецхо и

Ксаргс вербосе

лхс | каргс -т отхер_каргс_оптионс_иф_ани | рхс

Опција -т се може користити за приказивање наредби које изводи каргс као излаз на фд2, стандардну грешку. То је каргс -т се може поништити преусмеравањем стандардне грешке на / дев / нулл на следећи начин.

каргс -т 2> / дев / нулл
Пример) Да једном
да | глава -н 5 | каргс -тачно
истина и и и и и и
Пример) Да 5 пута
да | глава -н 5 | каргс -т -И тачно
истина г
истина г
истина г
истина г
истина г

Ксаргс понашање

Ниједна наредба није потпуна без опција за модификовање рунтиме понашања. Ксаргс се не разликује. Ево опција које вам омогућавају да промените његово понашање.

Ксаргс нулл

лхс | каргс -0 отхер_каргс_оптионс_иф_ани | рхс

Опција -0 се може користити да нареди карговима да користе нулл уместо размака. Такође онемогућава цитате и секвенце бекства.

да | глава -н 5 | сед "с /.* / цул- "де" - 'сац' / "| каргс -И ецхо -ен" \ н \ к00 "
слепа улица
слепа улица
слепа улица
слепа улица
слепа улица
да | глава -н 5 | сед "с /.* / цул- "де" - 'сац' / "| каргс -0 -И ецхо -ен" \ н \ к00 "
цул- "де" - 'врећа'
цул- "де" - 'врећа'
цул- "де" - 'врећа'
цул- "де" - 'врећа'
цул- "де" - 'врећа'
Нулл случај Ксаргс

Намењено за каргс нулл је за руковање случајевима, на пример када ставке садрже размаке као што су датотеке које садрже размаке или знакове новог реда.

Претпоставимо да имате директоријум „а б ц“ који укључује размаке у имену директоријума.

је "а б ц"
де / фг / х / 'и ј к л' /

Желите да покренете команду на сваком директоријуму у „а б ц“ помоћу команде финд.

Можете пробати следеће:

наћи "а б ц" -тип д | каргс ду -д 0 -х
ду: не може приступити 'а': Не постоји таква датотека или директоријум
ду: не може приступити 'б': Не постоји таква датотека или директоријум
ду: не може приступити 'ц': Не постоји таква датотека или директоријум
ду: не може приступити 'а': Не постоји таква датотека или директоријум
ду: не може приступити 'б': Не постоји таква датотека или директоријум
ду: не може приступити 'ц / де': Не постоји таква датотека или директоријум
ду: не може приступити 'а': Не постоји таква датотека или директоријум
ду: не може приступити 'б': Не постоји таква датотека или директоријум
ду: не може приступити 'ц / фг': Не постоји таква датотека или директоријум
ду: не може приступити 'а': Не постоји таква датотека или директоријум
ду: не може приступити 'б': Не постоји таква датотека или директоријум
ду: не може приступити „ц / х“: Не постоји таква датотека или директоријум
ду: не може приступити 'а': Не постоји таква датотека или директоријум
ду: не може приступити 'б': Не постоји таква датотека или директоријум
ду: не може приступити 'ц / и': Не постоји таква датотека или директоријум
ду: не може приступити 'ј': Не постоји таква датотека или директоријум
ду: не може приступити 'к': Не постоји таква датотека или директоријум
ду: не може приступити 'л': Не постоји таква датотека или директоријум

Ради нетачно јер су наша имена директорија прожета размацима. То вам није била намера.

То можете поправити додавањем замене за каргс, тј.е -И како следи.

наћи "а б ц" -тип д | каргс -и ду -д 0 -х
0 а б ц
0 а б ц / де
0 а б ц / фг
0 а б ц / х
0 а б ц / и ј к л

Ради исправно када се користи замена за каргс. Имајте на уму да смо користили -и, што је скраћеница за -И .

Други начин на који можемо постићи исти резултат је коришћење каргс нулл, -нулл, у комбинацији са опцијом пронађи -принт0 на следећи начин.

пронађи "а б ц" -тип д -принт0 | каргс --нулл -и ду -д 0 -х
0 а б ц
0 а б ц / де
0 а б ц / фг
0 а б ц / х
0 а б ц / и ј к л

Велики! Сада имамо више од једног начина да се дубоко забијемо у универзум датотечног система, а да не бринемо о судару са свемирским смећем на нашем путовању. Управо.

Ксаргс интерактивни

Можда не верујете да каргс покреће све наредбе без потврде. У том случају, каргс интерактивни или -п је опција која вам треба да контролишете које наредбе покрећу каргс како следи.

пронађи "а б ц" -тип д -принт0 | каргс --нулл -и -п ду -д 0 -х
ду -д 0 -х а б в ?…
ду -д 0 -х а б ц / де ?…
ду -д 0 -х а б ц / фг ?… Г
0 а б ц / фг
ду -д 0 -х а б ц / х ?… Да
0 а б ц / х
ду -д 0 -х а б ц / и ј к л ?… не

Овде се покреће било која наредба која почиње са 'и' или 'И'. У супротном, наредбе се занемарују.

Ксаргс датотека

Већ имате датотеку, арг-датотеку, спремну за читање у каргс. Ваш програм можда негде чека око директоријума да би неко други или нека друга инстанца себе убацио у арг-датотеку. У овом случају, датотеку можете одредити као опцију за каргс помоћу -а арг-датотеке, уместо да морате да користите датотеку цат | каргс… Следе примери Ксаргс датотека.

Само из забаве, претворимо ваше рутине чишћења радне површине у арг-датотеку коју можемо користити.

је чишћење рачунара | тее арг-датотека
190605_цлеануп_десктоп_филес_сх.ткт
190605_цлеануп_десктоп_лнк_филес_сх.ткт
190605_цлеануп_десктоп_ун_филес_сх.ткт

Свака датотека садржи рутину која се може покренути помоћу басх-а. То значи да је наредба коју ћемо користити басх.

Покренимо рутине чишћења користећи каргс.

каргс -а арг-датотека -и -П 99 басх -ц 'ецхо ; . цлеануп-десктоп / ; '
190605_цлеануп_десктоп_филес_сх.ткт
190605_цлеануп_десктоп_лнк_филес_сх.ткт
190605_цлеануп_десктоп_ун_филес_сх.ткт

И успева!
Само у случају да треба да наведемо арг-датотеку уместо да користимо улазни улаз, опција каргс датотеке добро долази.

Ксаргс заменити

лхс_иф_ани | каргс -и отхер_аргс_етц | рхс_иф_ани

На крају, али не најмање важно, каргс реплаце -и вам омогућава да преузмете потпуну контролу над форматом наредбе пре него што се покрене. Може се користити било који знак. Међутим, следећи конвенцију, већина басх програмера користи ово или овај%. Имајте на уму да је подразумевано . -ја кажем каргс-у да ћете бити коришћени као подразумевани. И сматра се стенографијом. -Слиједио сам замјенски лик по вашем избору, који каргс-у говори који ћете лик користити. Избегавајте употребу уобичајених знакова попут слова а. То ће сломити ваш код више него било који размак или нови ред икада.

Ксаргс паралелно

лхс_иф_ани | каргс -П н_ге_1 отхер_аргс_етц | рхс_иф_ани

Ксаргс паралелно -П омогућава да се команде извршавају истовремено, уместо у низу. Погледајте каргс лимит -схов-лимит за важеће аргументе за н_ге_1 или паралелност. На пример, ако

Максимални паралелизам (--мак-процс не сме бити већи): 2147483647

Можете подесити -П 2147483647 без грешака. У пракси ћете можда пронаћи лепшу поставку попут -П 99 која побољшава укупне перформансе без повећања опћих трошкова за управљање истовременим процесима.

Следе примери који показују како коришћење паралелних каргс може побољшати перформансе.

Пример) Бројање у низу у односу на паралелно коришћењем каргс

Погледајмо шта се дешава када рачунамо време у низу користећи каргс.

временски одјек 1… 1000 | каргс '-д' -и басх -ц 'ецхо '

998
999
1000
реална 1м13.927с
корисник 0м6.994с
сис 0м15.184с

Сада погледајте шта ће се десити ако паралелно рачунамо време користећи каргс.

временски одјек 1… 1000 | каргс -П 200 '-д' -и басх -ц 'ецхо '

998
999
1000
реална 0м13.554с
корисник 0м6.446с
сис 0м14.293с

Значајно побољшање перформанси се примећује коришћењем паралелних каргс за покретање једноставних команди без заједничких ресурса.

Пример) Упоређивање редоследа и времена паралелних каргова

Погледајмо шта се дешава када наредба троши процесорско време.

временски одјек 1… 10 | каргс '-д' -и басх -ц 'слееп $ (($ РАНДОМ% 2)); одјек '
1
2
3
4
5
6
7
8
9
10
реална 0м5.601с
корисник 0м0.180с
сис 0м0.334с

Имајте на уму да су све наредбе довршене редом.

Сада погледајте шта се дешава када се иста наредба покреће паралелно.

временски одјек 1… 10 | каргс -П 10 '-д' -и басх -ц 'слееп $ (($ РАНДОМ% 2)); одјек '
3
4
6
7
8
1
2
5
9
10
реална 0м1.257с
корисник 0м0.060с
сис 0м0.225с
Команде 1, 2, 5 и 9 су прешле на спавање. Међутим, успели смо да смањимо
време за завршетак за чак 78 процената.
Ксаргс паралелни закључак

Једноставно додавање каргс паралелних као опција командне линије може десетоструко побољшати перформансе. Међутим, требате поступати опрезно када користите процедуре зависне од налога или када команде деле ресурсе.

Ксаргс граничник

лхс_иф_ани | каргс '-дц' отхер_аргс_етц | рхс_иф_ани

Ксаргс граничник -д вам омогућава да поставите сепаратор предмета на било који знак ц на исти начин на који се постављају граничници у наредби цут.

Подразумевано је -дц подешено на размак који креира знак новог реда -д \ к0а.
Када се користи каргс нулл -0, -дц се поставља на нулл знак -д \ к00.

На пример, можете поставити граничник на размак, тј.е. -дц је '-д' у командној линији или вашој басх скрипти.

Можете поставити граничник на знак зареза, тј.е. -ДЦ је '-д',.

Опција граничника у каргс -д омогућава вам да поставите сепаратор предмета на било који знак који желите.

Примери Басх каргс-а

Овде покривамо примере употребе наредбе каргс у басх, укључујући примере употребе у командној линији, као и скрипте.

Примери команди Басх каргс

Овде покривамо примере примене командне линије наредбе каргс у басх, укључујући примере употребе са и без уноса цеви.

Пример) Направите свој властити унос: забава са каргс-ом без уноса

Шта каргс ради сам код куће?

каргс
Здраво, има ли кога?

(Цтрл-Д)
Здраво, има ли кога?…

Чини се да смо своје питање вратили као одговор, али чини се да је то само одјек.

Зашто?

Као што сте можда прочитали у чему је каргс, он претвара стандардни улаз у аргументе наредбених редова. Ако нису дате никакве опције и аргументи, понаша се попут ецхо команде која зна цев. То је:

каргс
Здраво, има ли кога?

(Цонтрол-Д) 2

Имплицитно производи еквивалентни израз ецхо наредбене линије

ецхо Здраво, има ли кога код куће?…
2 У сценарију се хередоц може користити на следећи начин.
каргс << EOF
Здраво, има ли кога?

ЕОФ
ецхо Здраво, има ли кога код куће?…

Пример) Користите каргс као резервирано место за интерактивне цеви

Парадоксално је коришћење каргова на левој страни цеви4 па покренимо басх у супер ограниченом режиму5.

4 Наредбама свјесним цијеви нису потребни каргс. Команде несвесних цеви не знају за каргс

5 Ограничени режим који ресетује сваку линију. Остала ограничења могу се додати касније.

каргс -И басх -цр ""
и = 1
ецхо $ и
ехо Здраво!
Здраво!
!!
басх: !!: наредба није пронађена
и = 1; ецхо $ и
1
цд…
басх: ​​линија 0: цд: ограничено

Пример) Користите каргс као резервирано место за интерактивне аргументе

Према извештају о вештинама програмера ХацкерРанк за 20193,  „Калкулатори су нове игре.”Више програмера млађих од 38 година користи калкулатор као први пројекат кодирања. 3 Увид заснован на 71.281 програмера

Дакле, хајде да направимо калкулатор користећи каргс!

_ () ​​ецхо $ (("$ @")); # калкулатор
док :
урадите
_ $ (каргс)
Готово
1 + 2 + 3 + 4
(Цтрл-Д)
10
1 - 2 + 3 - 4 + 5
(Цтрл-Д)
3
1 ** 2 + 2 ** 2
(Цтрл-Д)
3
1+
2+
3+
4+
5
(Цтрл-Д)
15

Пример) Статички генератор локације

Претпоставимо да имате неколико хиљада датотека са обичним текстом за које желите да генеришете статичку локацију и ниједна датотека није именована индексом. Имена датотека укључују мала слова асции и цртицу ако постоје.

Ево како би изгледала линија или две у терминалу теоретске машине која ради на басху. Машина ће имати друге спољне команде, укључујући финдутилс и пандоц. Можете користити било коју еквивалентну команду по вашем избору.

# ми смо у директоријуму
# видите пуно датотека

тест -д "хтмл" || мкдир -в $ _
наћи . -дубина 1 -макдептх 1 -тип ф \
|. | каргс -П 6000 -и басх -ц "ецхо ; цат | сед -е 'с / $ / /' |
пандоц -тхтмл -о .хтмл "

# видите сада двоструко више датотека, укључујући хтмл датотеке
# Готово

Примери Басх каргс скрипти

Пример) Користите каргс за генерисање квадратних матрица

Ево скрипте коју сам припремио за генерисање квадратних матрица користећи каргс. Конкретно, користи предност понашања користећи опцију -н и користи наредбу сек за секвенце бројева који ће се користити у матрицама.

#!/ бин / басх
## квадратна матрица
## - генерише квадратне матрице
## верзија 0.0.1 - почетно
####################################################
квадрат-матрица-помоћ ()

мачка << EOF
квадрат-матрица
1 - ред
ПРИМЕРИ
> квадратна матрица 1
1
> квадрат-матрица 2
1 2
3 4
> квадратна матрица 3
1 2 3
4 5 6
7 8 9
ЕОФ


квадратна матрица () локални -и поредак; поруџбина = $ 1;
тест „$ ордер“ || $ ФУНЦНАМЕ -помоћ; повратак;
тест $ ордер -гт 0 || $ ФУНЦНАМЕ -помоћ; повратак;
_ () ​​
сек $ (($ 1 ** 2)) | каргс -н $ 1

_ $ наруџба

####################################################
ако [ ! ]
онда
истинито
иначе
излаз 1 # погрешне аргументе
фи
####################################################
квадратна матрица $ @
####################################################
## генерише цреате-стуб2.сх в0.1.2
## у среду, 29. маја 2019. 13:44:06 +0900
## види
####################################################

Извор: квадратна матрица.сх

Такође сам укључио тест програм за приказивање скрипте у акцији, генеришући све квадратне матрице до 10 к 10.

#!/ бин / басх
## тест-квадрат-матрица
## - генерише квадратне матрице до 10 к 10
## верзија 0.0.1 - почетно
####################################################
тест-квадрат-матрица ()
тест -ф "квадрат-матрица.сх "
. $ _ 1> / дев / нулл
локални и
за ја у 1… 10
урадите
ецхо "квадрат-матрица ($ и)"
квадратна матрица $ и
Готово

####################################################
ако [$ # -ек 0]
онда
истинито
иначе
излаз 1 # погрешне аргументе
фи
####################################################
тест-квадрат-матрица
####################################################
## генерише цреате-стуб2.сх в0.1.2
## у среду, 29. маја 2019. 13:40:08 +0900
## види
####################################################

Извор: тест-квадрат-матрица.сх

Ево шта можете очекивати:

басх тест-квадрат-матрица.сх | глава
квадратна матрица (1)
1
квадратна матрица (2)
1 2
3 4
квадратна матрица (3)
1 2 3
4 5 6
7 8 9
Вежба: Побољшајте приказ на терминалу применом попуњености бројева

Када покушамо да генеришемо квадратну матрицу реда 10 са 10, добијамо следећи излаз:

басх квадрат-матрица.сх 10
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100

Као вежба проширите квадратну матрицу.сх да омогући излаз на следећи начин.

басх квадрат-матрица.сх 10
001 002 003 004 005 006 007 008 009 010
011 012 013 014 015 016 017 018 019 020
021 022 023 024 025 026 027 028 029 030
031 032 033 034 035 036 037 038 039 040
041 042 043 044 045 046 047 048 049 050
051 052 053 054 055 056 057 058 059 060
061 062 063 064 065 066 067 068 069 070
071 072 073 074 075 076 077 078 079 080
081 082 083 084 085 086 087 088 089 090
091 092 093 094 095 096 097 098 099 100

Басх каргс примери практичне употребе

Пример) Претражите датотеке за образац помоћу каргс греп

списак датотека1 |. | каргс греп -е образац

1 лист-филес је наредба која враћа путове кандидата до датотеке који ће се узети као улаз за греп кроз каргс наредбу

Као пример практичне употребе каргова у басху, ископао сам каргс из тајне базе кода.

пронађи -тип ф -име \ *.сх | вц -л
994

Постоји 994 басх скрипте. Да видимо колико команде каргс.

пронађи -тип ф -име \ *.сх | каргс греп -е каргс наводи све појаве
каргова у кодној бази.

пронађи -тип ф -име \ *.сх | каргс греп -е каргс | вц -л
18

У кодној бази постоји 18 подударања за каргс. Сада бисмо можда желели да схватимо колико скрипти користи каргс.

пронађи -тип ф -име \ *.сх | каргс греп | исеци '-д:' '-ф1' | сортирај |
уник наводи скрипте користећи каргс.

пронађи -тип ф -име \ *.сх | каргс греп -е каргс | исеци '-д:' '-ф1' |
сортирај | уник | вц -л
10

Велики! У кодној бази постоји 10 скрипти са каргс. Да видимо шта су.

пронађи -тип ф -име \ *.сх | каргс греп -е каргс | исеци '-д:' '-ф1' | сортирај | уник
вим $ ( !! )

Резиме налаза

    • Претражите и уништите датотеке које садрже образац у имену датотеке
пронађи $ патх -типе ф -наме \ * $ паттерн \ * | каргс рм -вф
    • Наведите информације о датотекама на лхс цеви
пронађи датотеке | каргс лс -ал
    • Нека датотеке буду извршне
пронађи датотеке | каргс цхмод + к
    • Наведите именике датотека
пронађи датотеке | каргс -И дирнаме ""
    • Очисти све
путање до чишћења | каргс рм -рвф
    • Зип датотеке
финд-филес-то-зип | каргс -И архива - $ (датум +% с)
    • Наведи основна имена датотека
пронађи датотеке | каргс -И основно име

Пример) Инсталирајте софтвер са листе помоћу апт-гет у Убунту-у

Приликом надоградње Убунту-а, након израде сигурносне копије система можда ћете морати да инсталирате нови софтвер. Претпоставимо да имате листу софтвера за инсталирање помоћу апт-гет у Убунтуу.

судо дпкг --гет-селецтионс | греп '[[: спаце:]] инсталирај $' |
\ авк 'принт $ 1'> инсталл_софтваре
#…
цат инсталл_софтваре | каргс судо апт-гет инсталација

Пример) Увијте сеиге користећи каргс у басх

Претпоставимо да имате гомилу УРЛ-ова који воде до једног чвора негде на Интернету и желели бисте да поставите сеиге користећи цурл у басх. Пожељно је да је ово један од ваших чворова, а сеиге није у вашем производном окружењу. Ево како постављамо сеиге користећи каргс у басх.

#децларе -ф филтер
филтер ()

греп -о -е 'лоц [^<]*' | cut '-d>'' -ф2 '

гет-арг-филе ()

цурл хттпс: // линукхинт.цом / ситемап.кмл --силент \
|. | филтер \
|. | каргс -и цурл - тихо \
|. | филтер \
|. | каргс -и ецхо > арг-датотека

#децларе -ф цурл
цурл ()

ецхо (лажни) $ ФУНЦНАМЕ "$ @"

прогласити -кф цурл
носивост ()

тест -ф "арг-датотека" || повратак
каргс -П 1000 -а арг-датотека -и ехо цурл | басх 1> / дев / нулл

сеиге ()

тест -ф "арг-датотека" || добити - $ _
корисни терет

сеиге

Отклањање грешака у Басх каргс-у

Када сједнете испред терминала ви сте шеф. Међутим, када нешто пође по злу, помаже ако знате како заправо отклонити грешке у басх скриптама попут шефа.

Играјући на сигурно, топло се препоручује постојање методе за потврду успеха када се каргс користи у басх-у, а не слепо очекивање да ће све бити у реду. Односно, морате се побринути да све наредбе са успехом и неуспехом не остану неозначене.

Методе

  • Величина излаза стандардне грешке
    Ако стандардна грешка садржи 1 или више знакова, нешто је пошло по злу
  • Збир командних излазних кодова
    Ако је збирни број излазних кодова већи од 0, нешто је пошло по злу
  • Валидација корисног терета
    Ако недостаје део корисног терета, нешто је пошло по злу
  • Крај валидације скрипте
  • Покретање каргс наредби као скрипте, ако се крај скрипте не постигне, нешто је пошло по злу. Имајте на уму да је постављен еррекит и да се команде покрећу унутар функције.
  • Други метод
    Ако се исход разликује од очекиваног, онда је можда нешто пошло по злу

Пример) Отклањање грешака у каргс-у коришћењем величине стандардног излаза грешке

Ево анонимне функције којом тестирамо отклањање грешака у каргс-у користећи грешку стардарт.

# пријавити -ф _, тј.е. Нисам написао код испод
# ако откријете да сте мало зарђали, изјавите да сам написао још један водич
#
како декларишу наредба у басх-у

_ ()

рм -вф грешка;
додирните $ _;
ехо 1… 10 | каргс -к -П 10 '-д' -и басх -ц "тест $ (($ РАНДОМ% $ 1)) -ек 0 ||
ецхо 1> & 2; излаз; ; ецхо "2> грешка;
тест ! $ (вц < errout -c ) -gt 0 || echo something went wrong…

## тест
_ 1 # вероватноћа отказа (= 1-1 / 1 = 0%)
_ 2 # вероватноћа отказа (= 1-1 / 2 = 1/2 = 50%)
_ 3 # вероватноћа квара (= 1-1 / 3 = 2/3 = 60%)

Ако не користите стандардну грешку ни за шта друго, величина стандардне грешке за отклањање грешака у каргс је један од начина који ће вам одговарати.

Басх каргс функције

Понекад оно што желите да урадите је да користите функције које сте дефинисали у каргс. Да бисмо то урадили, морамо учинити функцију доступном каргс. Ево како.

#децларе -ф _
_ ()

ецхо $ @ ^^

ецхо а… з 1… 9 | каргс '-д' -и басх -ц "_ "
басх: ​​_: наредба није пронађена

прогласити -кф _
ецхо а… з 1… 9 | каргс '-д' -и басх -ц "_ "
А1
А2
А3

# или
ецхо а… з 1… 9 | каргс '-д' -и ецхо "_ " | басх

З7
З8
З9

Имајте на уму да се горњи пример интерактивне сесије може убрзати коришћењем басх каргс паралелно.

Закључак

Ксаргс је једна од многих спољних команди које бисте боље познавали у басх-у. Пишући овај водич кроз команду каргс, научио сам неколико додатних могућности. Препоручује се преглед свако толико често. Тек тада ћете моћи да користите каргс у стварном потенцијалу. До тада, код даље.

Како развити игру на Линуку
Пре деценију, није много корисника Линука предвидело да ће њихов омиљени оперативни систем једног дана бити популарна платформа за играње комерцијални...
Портови комерцијалних игара отвореног кода
Бесплатне рекреације покретачких игара са отвореним кодом и више платформи могу се користити за играње старих, као и неких прилично недавних наслова и...
Најбоље игре командне линије за Линук
Командна линија није само ваш највећи савезник када користите Линук - она ​​такође може бити извор забаве јер је можете користити за играње многих заб...