Како користити команду иес на Линук-у

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

Команда да

Команда иес је једна од најједноставнијих команди у Линуку и другим оперативним системима сличним Уник-у као што је мацОС. А под једноставним мислимо на једноставну употребу и почетну имплементацију. Изворни код за оригиналну верзију—објављен у систему 7 Уник и аутор Кен Тхомпсон—износи пуко шест линија кода.

Али немојте је отписивати јер је једноставна мала команда. Може се користити на неке занимљиве и корисне начине.

Шта ради иес?

Када се користи без параметара командне линије, команда иес се понаша као да куцате „и“ и притискате Ентер, изнова и изнова (и изнова и изнова). Веома брзо. И наставиће тако све док не притиснете Цтрл+Ц да бисте га прекинули.

yes

У ствари, да се може користити за стално генерисање било које поруке коју одаберете. Једноставно откуцајте да, размак, стринг који желите да користите, а затим притисните Ентер. Ово се често користи да изазове да да генерише излазни ток низова „да“ или „не“.

yes yes

yes anything you like

Али каква је то корист?

Излаз из иес-а се може пренети у друге програме или скрипте.

Да ли ово звучи познато? Започињете дугачак процес и одмичете се, остављајући га да ради. Када се вратите на рачунар, процес уопште није завршен. У вашем одсуству, поставио вам је питање и чека одговор са „да“ или „не“.

Ако унапред знате да ће сви ваши одговори бити позитивни („да“ или „и“) или негативни („не“ или „н“), можете користити да да бисте дали те одговоре за вас. Ваш дуги процес ће се затим одвијати до краја без надзора уз давање одговора на сва питања која процес поставља.

Коришћење да са скриптама

Погледајте следећу Басх схелл скрипту. (Морамо да замислимо да је ово део много веће скрипте за коју ће бити потребно доста времена да се покрене.)

#!/bin/bash

# ...
# in the middle of some long script
# obtain a response from the user
# ...

echo "Are you happy to proceed? [y,n]"
read input

# did we get an input value?
if [ "$input" == "" ]; then

   echo "Nothing was entered by the user"

# was it a y or a yes?
elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then

   echo "Positive response: $input"

# treat anything else as a negative response
else

   echo "negative response: $input"

fi

Ова скрипта поставља питање и чека одговор. Логички ток унутар скрипте се одлучује на основу уноса корисника.

„Да“ или „и“ означава позитиван одговор.
Сваки други унос се сматра негативним одговором.
Притиском на Ентер без уноса текста ништа не ради.

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

chmod +x long_script.sh

Покрените скрипту са следећом командом. Покушајте да унесете „да“, „и“ и било шта друго као унос, укључујући притисак на Ентер без уноса текста.

./long_script.sh

Да бисте добили одговор да дамо одговор на питање скрипте, пренесите излаз од да у скрипту.

yes | ./long_script.sh

Неке скрипте су ригидније у својим захтевима и прихватају само пуну реч „да“ као позитиван одговор. Можете да наведете „да“ као параметар за да, на следећи начин:

yes yes | ./long_script.sh

Немојте рећи да без размишљања

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

Логика у скрипти, команди или програму можда неће одговарати вашим очекивањима. У нашем примеру скрипте, питање би могло бити „Да ли желите да престанете? [y,n].” Да је то био случај, негативан одговор би омогућио наставак сценарија.

Морате бити упознати са скриптом, командом или програмом пре него што безочно унесете да.

Коришћење да са командама

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

Узмимо за пример Убунту менаџер пакета апт-гет. Да бисте инсталирали апликацију без притискања „и“ на пола пута током инсталације, да би се користило на следећи начин:

yes | sudo apt-get install fortune-mod

Исти резултат се може постићи коришћењем -и (претпостави да) опције у апт-гет:

sudo apt-get -y install fortune-mod

Видећете да апт-гет није чак ни питао своје уобичајено „Да ли желите да наставите? [Y/n]” питање. Само се претпостављало да ће одговор бити „да“.

На другим дистрибуцијама Линука, ситуација је иста. На Федора-и бисте у једном тренутку користили овај тип команде менаџера пакета:

yes | yum install fortune-mod

Менаџер днф пакета је заменио иум и днф има сопствену -и (претпостави да) опцију.

dnf -y install fortune-mod

Исто важи и за цп, фсцк и рм. Свака од ових команди има своје опције -ф (присилно) или -и (претпостави да).

Дакле, да ли се чини да је иес потиснут само на рад са скриптама? Не баш. Има још неколико трикова у старом псу.

Неки даље да трикови

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

Овај једнолинер одјекује генерисане цифре у прозор терминала, а затим позива стање мировања на једну секунду.

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

yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done

Понекад је корисно имати велику датотеку за тестирање. Можда желите да вежбате коришћење зип команде или желите да имате велику датотеку за тестирање ФТП отпремања.

Можете брзо да генеришете велике датотеке са да. Све што треба да урадите је да му дате дугачак низ текста за рад и преусмерите излаз у датотеку. Немој да погрешиш; те датотеке ће брзо расти. Будите спремни да притиснете Цтрл+Ц у року од неколико секунди.

yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt

Датотеци генерисаној овде је требало око пет секунди на тест машини која је коришћена за истраживање овог чланка. лс извештава да је величине 557 Мб, а вц нам каже да у њему има 12,4 милиона линија.

Можемо ограничити величину датотеке укључивањем главе у наш командни низ. Ми му кажемо колико редова треба укључити у датотеку. -50 значи да ће глава пропустити само 50 редова до тест.ткт датотеке.

yes long line of meaningless text for file padding | head -50 > test.txt

Чим у датотеци тест.ткт буде 50 редова, процес ће се зауставити. Не морате да користите Цтрл+Ц. Долази до грациозног заустављања својом вољом.

вц извештава да постоји тачно 50 редова у датотеци, 400 речи и да је величине 2350 бајтова.

Иако је и даље корисна за унос одговора у дуготрајне скрипте (и неколико других трикова), команда иес неће бити део вашег свакодневног скупа команди. Али када вам затреба, видећете да је то сама једноставност — и све то у шест редова златног кода.