Как да използвате командата yes в Linux

Командата yes изглежда твърде проста, за да има практическа полза, но в този урок ще ви покажем нейното приложение и как да се възползвате от натрупаната й позитивност в Linux и macOS.

Командата да

Командата yes е една от най-простите команди в Linux и други подобни на Unix операционни системи като macOS. И под прост, имаме предвид прост в използването и първоначалното му изпълнение. Изходният код за оригиналната версия — издаден в System 7 Unix и автор на Кен Томпсън— възлиза на просто шест реда код.

Но не го отписвайте, че е проста малка команда. Може да се използва по някои интересни и полезни начини.

Какво прави да?

Използвана без параметри на командния ред, командата yes се държи така, сякаш пишете „y“ и натискате Enter, отново и отново (и отново и отново). Много бързо. И ще продължи да го прави, докато не натиснете Ctrl+C, за да го прекъснете.

yes

Всъщност, да може да се използва за многократно генериране на всяко съобщение, което изберете. Просто въведете да, интервал, низа, който искате да използвате, и след това натиснете Enter. Това често се използва, за да предизвика да генерира изходен поток от низове „да“ или „не“.

yes yes

yes anything you like

Но каква е ползата от това?

Резултатът от yes може да бъде прехвърлен в други програми или скриптове.

Това звучи ли познато? Започвате дълъг процес и се отдръпвате, оставяйки го да тече. Когато се върнете към компютъра, процесът изобщо не е завършил. Във ваше отсъствие той ви е задал въпрос и чака отговор с „да“ или „не“.

Ако знаете предварително, че всичките ви отговори ще бъдат положителни („да“ или „у“) или отрицателни („не“ или „n“), можете да използвате „да“, за да предоставите тези отговори вместо вас. След това вашият дълъг процес ще завърши до завършване без надзор с „да“, предоставяйки отговорите на всички въпроси, които процесът задава.

  Как да промените DNS настройките на Linux

Използване на да със скриптове

Вижте следния скрипт на обвивката на Bash. (Трябва да си представим, че това е част от много по-голям скрипт, който ще отнеме значително време за изпълнение.)

#!/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

Този скрипт задава въпрос и очаква отговор. Логическият поток в скрипта се определя от входа на потребителя.

„Да“ или „у“ показва положителен отговор.
Всеки друг вход се счита за отрицателен отговор.
Натискането на Enter без въведен текст не прави нищо.

За да тествате това, копирайте скрипта във файл и го запазете като long_script.sh. Използвайте chmod, за да го направите изпълним.

chmod +x long_script.sh

Стартирайте скрипта със следната команда. Опитайте да предоставите „да“, „у“ и всичко друго като вход, включително натискане на Enter без въведен текст.

./long_script.sh

За да получите „да“, за да предоставим нашия отговор на въпроса на скрипта, прехвърлете изхода от „да“ към скрипта.

yes | ./long_script.sh

Някои скриптове са по-строги в своите изисквания и приемат само пълната дума „да“ като положителен отговор. Можете да предоставите „да“ като параметър на да, както следва:

yes yes | ./long_script.sh

Не казвайте да, без да го обмислите

Трябва да сте сигурни, че входът, който ще подадете в скрипта или програмата, определено ще ви даде резултата, който очаквате. За да можете да вземете това решение, трябва да знаете въпросите и какви трябва да бъдат отговорите ви.

  Най-добрите алтернативи на Mac приложения за Linux

Логиката в скрипта, командата или програмата може да не отговаря на вашите очаквания. В нашия примерен скрипт въпросът може да е „Искате ли да спрете? [y,n]” Ако това беше така, отрицателен отговор щеше да позволи на скрипта да продължи.

Трябва да сте запознати със скрипта, командата или програмата, преди безгрижно да ги дадете.

Използване на yes With Commands

В зародиш, yes ще се използва с други команди на Linux. Оттогава повечето от тези други Linux команди имат свой собствен начин на изпълнение без човешко взаимодействие. да, вече не е необходимо за постигане на това.

Нека вземем за пример мениджъра на пакети Ubuntu apt-get. За да инсталирате приложение, без да се налага да натискате „y“ по средата на инсталацията, yes ще се използва, както следва:

yes | sudo apt-get install fortune-mod

Същият резултат може да бъде постигнат с помощта на опцията -y (приемете да) в apt-get:

sudo apt-get -y install fortune-mod

Ще видите, че apt-get дори не е попитал обичайното си „Искате ли да продължите? [Y/n]” въпрос. Просто се предполагаше, че отговорът ще бъде „да“.

При други дистрибуции на Linux ситуацията е същата. Във Fedora бихте използвали този тип команда за мениджър на пакети наведнъж:

yes | yum install fortune-mod

Мениджърът на пакети dnf е заменил yum и dnf има своя собствена опция -y (да приемем, че да).

dnf -y install fortune-mod

Същото важи и за cp, fsck и rm. Всяка от тези команди има свои собствени опции -f (принудително) или -y (да приемем, че да).

Така че изглежда ли, че yes е сведен до работа само със скриптове? Не точно. Има още няколко трика в старото куче все още.

Някои допълнителни трикове да

Можете да използвате yes с поредица от цифри, генерирани от seq, за да контролирате цикъл от повтарящи се действия.

Този едноредов повтаря генерираните цифри в прозореца на терминала и след това извиква спящ режим за една секунда.

  Как да играете Sega игри на Linux с помощта на Gens

Вместо просто да повтаряте цифрите в прозореца на терминала, можете да извикате друга команда или скрипт. Тази команда или скрипт дори не трябва да използва цифрите и те са там само за да стартират всеки цикъл на цикъла.

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

Понякога е полезно да имате голям файл за тестване. Може би искате да практикувате с помощта на командата zip или искате да имате голям файл, с който да тествате FTP качвания.

Можете бързо да генерирате големи файлове с да. Всичко, което трябва да направите, е да му дадете дълъг низ от текст, с който да работите, и да пренасочите изхода във файл. Не се заблуждавайте; тези файлове ще растат бързо. Бъдете готови да натиснете Ctrl+C в рамките на няколко секунди.

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

Генерираният тук файл отне около пет секунди на тестовата машина, използвана за изследване на тази статия. ls съобщава, че е с размер 557 Mb и wc ни казва, че има 12,4 милиона реда в него.

Можем да ограничим размера на файла, като включим глава в нашия команден низ. Ние му казваме колко реда да включи във файла. -50 означава, че главата ще пропусне само 50 реда до файла test.txt.

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

Веднага след като във файла test.txt има 50 реда, процесът ще спре. Не е необходимо да използвате Ctrl+C. Стига до изящно спиране по собствено желание.

wc съобщава, че във файла има точно 50 реда, 400 думи и той е с размер 2350 байта.

Въпреки че все още е полезна за подаване на отговори в дългосрочни скриптове (и няколко други трика), командата yes няма да бъде част от ежедневния ви инструментариум от команди. Но когато имате нужда от него, ще откриете, че това е самата простота — и всичко това в шест реда златен код.