A yes parancs használata Linuxon

A yes parancs túl egyszerűnek tűnik ahhoz, hogy gyakorlati haszna legyen, de ebben az oktatóanyagban bemutatjuk annak alkalmazását, és azt, hogy miként hasznot húzhat a Linuxon és a macOS-en elfojtott pozitív tulajdonságaiból.

Az igen parancs

A yes parancs az egyik legegyszerűbb parancs a Linuxban és más Unix-szerű operációs rendszerekben, például a macOS-ben. Egyszerűen pedig egyszerűt értünk a használatában és a kezdeti megvalósításában. Az eredeti verzió forráskódja – System 7 Unix rendszerben adták ki, és szerzője Ken Thompson-egy puszta hat sor kód.

De ne írd le egyszerű kis parancsnak. Érdekes és hasznos módon lehet használni.

Mit csinál a yes?

Parancssori paraméterek nélkül használva a yes parancs úgy viselkedik, mintha „y”-t írna be, és ismételten (és újra és újra) megnyomná az Entert. Nagyon gyorsan. Ezt addig folytatja, amíg meg nem nyomja a Ctrl+C billentyűkombinációt a megszakításhoz.

yes

Valójában a yes használható bármilyen választott üzenet ismételt generálására. Egyszerűen írja be az igent, egy szóközt, a használni kívánt karakterláncot, majd nyomja meg az Enter billentyűt. Ezt gyakran használják arra, hogy a yes „igen” vagy „nem” karakterláncokból álló kimeneti adatfolyamot generáljon.

yes yes

yes anything you like

De mi haszna van ennek?

A yes kimenete más programokba vagy parancsfájlokba is átvezethető.

Ez ismerősen hangzik? Elkezdesz egy hosszú folyamatot, és kilépsz, hagyva futni. Amikor visszatér a számítógépéhez, a folyamat egyáltalán nem fejeződött be. Távollétében kérdést tett fel Önnek, és „igen” vagy „nem” válaszra vár.

Ha előre tudja, hogy minden válasza pozitív („igen” vagy „i”) vagy negatív („nem” vagy „n”) lesz, használhatja az igent, hogy megadja ezeket a válaszokat. A hosszú folyamat ezután felügyelet nélkül befejeződik, igennel, és választ ad a folyamat által feltett kérdésekre.

  Hogyan kerüljük el a végtelen háború spoilereit, amíg meg nem látjuk a filmet

Igen használata Scriptekkel

Nézze meg a következő Bash shell szkriptet. (El kell képzelnünk, hogy ez egy sokkal nagyobb szkript része, amelynek futtatása jelentős időt vesz igénybe.)

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

Ez a forgatókönyv kérdést tesz fel, és választ vár. A szkripten belüli logikai folyamatot a felhasználó bemenete határozza meg.

Az „igen” vagy „y” pozitív választ jelez.
Minden más bevitel nemleges válasznak minősül.
Az Enter megnyomása beviteli szöveg nélkül semmit sem okoz.

Ennek teszteléséhez másolja a szkriptet egy fájlba, és mentse el long_script.sh néven. Használd a chmod-ot, hogy végrehajtható legyen.

chmod +x long_script.sh

Futtassa a szkriptet a következő paranccsal. Próbálja meg megadni az „igen”, „y” és bármi mást bevitelként, beleértve az Enter billentyűt beviteli szöveg nélkül.

./long_script.sh

Ahhoz, hogy igent kapjunk a szkript kérdésére adott válaszunkhoz, vezesse az igen kimenetet a szkriptre.

yes | ./long_script.sh

Egyes szkriptek szigorúbb követelményeket támasztanak, és csak a teljes „igen” szót fogadják el pozitív válaszként. A „yes” paramétert megadhatja a „yes”-nek az alábbiak szerint:

yes yes | ./long_script.sh

Ne mondj igent anélkül, hogy végiggondolnád

Biztosnak kell lennie abban, hogy a szkriptbe vagy programba bevitt bemenet biztosan a várt eredményt adja. Ahhoz, hogy meg tudja hozni ezt a döntést, ismernie kell a kérdéseket és a válaszokat.

  Microsoft Teams-címkék létrehozása és használata

Előfordulhat, hogy a szkriptben, parancsban vagy programban lévő logika nem felel meg az elvárásoknak. Példaszkriptünkben a kérdés a következő lehetett: „Szeretnéd abbahagyni? [y,n].” Ha ez így lett volna, akkor a nemleges válasz lehetővé tette volna a forgatókönyv folytatását.

Ismernie kell a szkriptet, parancsot vagy programot, mielőtt villámgyorsan igent mondana rá.

yes használata parancsokkal

Gyerekcipőben a yes más Linux-parancsokkal is használható lenne. Azóta a legtöbb Linux-parancs saját módon fut emberi beavatkozás nélkül. igen, már nem szükséges ennek eléréséhez.

Vegyük például az Ubuntu csomagkezelőt, az apt-getet. Egy alkalmazás telepítéséhez anélkül, hogy a telepítés felénél meg kellett volna nyomni az „y” billentyűt, a yes a következőképpen lett volna használva:

yes | sudo apt-get install fortune-mod

Ugyanez az eredmény érhető el az apt-get -y (feltételezzük, hogy igen) opcióval:

sudo apt-get -y install fortune-mod

Látni fogja, hogy az apt-get meg sem kérdezte a szokásos „Akarod folytatni? [Y/n]” kérdés. Csak azt feltételezte, hogy a válasz „igen” lesz.

Más Linux-disztribúciók esetében ugyanez a helyzet. Fedorán egy időben ezt a típusú csomagkezelő parancsot használta volna:

yes | yum install fortune-mod

A dnf csomagkezelő lecserélte a yum-ot, és a dnf-nek saját -y (feltételezzük, hogy igen) opciója van.

dnf -y install fortune-mod

Ugyanez vonatkozik a cp-re, az fsck-re és az rm-re is. Ezeknek a parancsoknak megvan a saját -f (force) vagy -y (feltételezzük, hogy igen) opciói.

Tehát úgy tűnik, hogy az igen csak a szkriptekkel való munkavégzésre került? Nem egészen. Van még néhány trükk az öreg kutyában.

Néhány további igen trükk

Használhatja a yes-t a seq által generált számsorral az ismétlődő műveletek ciklusának szabályozására.

Ez az egysoros a generált számjegyeket visszhangozza a terminál ablakába, majd egy másodpercre alvó állapotot hív.

  Bind-mounts és Symlinks használata Linuxon

Ahelyett, hogy egyszerűen visszhangozná a számjegyeket a terminálablakba, meghívhat egy másik parancsot vagy szkriptet. Ennek a parancsnak vagy szkriptnek még csak nem is kell használnia a számjegyeket, és csak azért vannak, hogy elindítsák a ciklus minden egyes ciklusát.

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

Néha hasznos lehet egy nagy fájl a teszteléshez. Talán szeretné gyakorolni a zip parancs használatát, vagy szeretne egy méretes fájlt az FTP-feltöltések tesztelésére.

A yes segítségével gyorsan generálhat nagy fájlokat. Mindössze annyit kell tennie, hogy adjon neki egy hosszú szöveget, amellyel dolgoznia kell, és a kimenetet átirányítja egy fájlba. Ne véts hibát; ezek a fájlok gyorsan növekedni fognak. Készüljön fel arra, hogy néhány másodpercen belül megnyomja a Ctrl+C billentyűkombinációt.

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

Az itt generált fájl körülbelül öt másodpercig tartott a cikk kutatásához használt tesztgépen. Az ls jelentése szerint 557 Mb méretű, és a wc szerint 12,4 millió vonal van benne.

Korlátozhatjuk a fájl méretét, ha a parancssorba beírjuk a fejet. Megmondjuk, hogy hány sort tartalmazzon a fájl. A -50 azt jelenti, hogy a fej mindössze 50 sort enged át a test.txt fájlba.

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

Amint 50 sor van a test.txt fájlban, a folyamat leáll. Nem kell használnia a Ctrl+C billentyűkombinációt. Önszántából kecsesen megtorpan.

A wc jelentése szerint a fájlban pontosan 50 sor van, 400 szó, mérete pedig 2350 bájt.

Annak ellenére, hogy továbbra is hasznos a válaszok hosszan futó szkriptekbe való betáplálásához (és néhány más trükkhöz), a yes parancs nem lesz a napi parancsok eszköztárának része. De amikor szüksége van rá, azt fogja tapasztalni, hogy ez maga az egyszerűség – és mindez hat sor aranykódban.