Polecenie yes może wydawać się zbyt proste, aby miało jakiekolwiek praktyczne zastosowanie, jednak w tym artykule pokażemy, jak wykorzystać jego właściwości w systemie Linux i macOS.
Polecenie yes
Polecenie yes jest jednym z najprostszych poleceń w systemie Linux oraz innych systemach operacyjnych typu Unix, takich jak macOS. Jego prostota i łatwość w użyciu sprawiają, że jest ono bardzo przydatne. Oryginalny kod źródłowy, wydany w System 7 Unix przez Kena Thompsona, zajmuje zaledwie sześć linii kodu.
Nie daj się jednak zwieść jego prostocie – polecenie yes można wykorzystać na kilka interesujących oraz przydatnych sposobów.
Co robi yes?
Użyte bez żadnych parametrów, polecenie yes generuje nieprzerwany strumień „y”, dopóki nie naciśniesz Ctrl + C, aby je przerwać.
yes
W rzeczywistości yes może być używane do generowania powtarzających się komunikatów. Wystarczy wpisać yes, następnie spację, a potem ciąg, którego chcesz użyć, i nacisnąć Enter. Jest to często wykorzystywane do generowania strumienia wyjściowego „tak” lub „nie”.
yes yes
yes anything you like
Po co to?
Dane wyjściowe z yes można przekazywać do innych programów lub skryptów.
Czy to brzmi znajomo? Rozpoczynasz długi proces i wychodzisz, pozostawiając go uruchomionym. Po powrocie do komputera, proces nadal czeka na Twoją odpowiedź „tak” lub „nie”.
Jeśli wiesz, że wszystkie Twoje odpowiedzi będą pozytywne („tak” lub „y”) lub negatywne („nie” lub „n”), możesz użyć yes, aby udzielić tych odpowiedzi za siebie. W ten sposób długi proces będzie przebiegał bez nadzoru, z pozytywną odpowiedzią na wszelkie pytania zadawane w trakcie procesu.
Używanie yes w skryptach
Przykładowy skrypt powłoki Bash może wyglądać tak:
#!/bin/bash # ... # w trakcie długiego skryptu echo "Czy chcesz kontynuować? [y,n]" read input # czy otrzymaliśmy wartość wejściową? if [ "$input" == "" ]; then echo "Nic nie zostało wpisane przez użytkownika" # czy to 'y' lub 'yes'? elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then echo "Pozytywna odpowiedź: $input" # traktuj wszystko inne jako negatywną odpowiedź else echo "Negatywna odpowiedź: $input" fi
Ten skrypt zadaje pytanie i oczekuje na odpowiedź. Logika w skrypcie zależy od danych wejściowych użytkownika.
Odpowiedź „tak” lub „y” jest uznawana za pozytywną. Naciśnięcie klawisza Enter bez wprowadzania tekstu nic nie robi.
Aby przetestować skrypt, skopiuj go do pliku i zapisz jako long_script.sh. Użyj polecenia chmod, aby uczynić go wykonywalnym.
chmod +x long_script.sh
Uruchom skrypt za pomocą poniższego polecenia. Próbuj wprowadzać „tak”, „y” oraz inne dane, w tym naciśnięcie klawisza Enter bez wprowadzania tekstu.
./long_script.sh
Aby uzyskać potwierdzenie i odpowiedzieć na pytanie skryptu, przekaż wyjście z yes do skryptu:
yes | ./long_script.sh
Niektóre skrypty mogą wymagać pełnego słowa „tak” jako pozytywnej odpowiedzi. Możesz podać „tak” jako parametr do yes:
yes yes | ./long_script.sh
Nie mów yes bez przemyślenia
Musisz być pewien, że dane wejściowe, które zamierzasz wprowadzić do skryptu lub programu, przyniosą oczekiwany wynik. Aby podjąć taką decyzję, musisz znać pytania oraz odpowiedzi, które powinieneś udzielić.
Logika skryptu, polecenia lub programu może nie odpowiadać Twoim oczekiwaniom. W naszym przykładzie pytanie mogłoby brzmieć „Czy chcesz przerwać? [y,n]”. W takim przypadku negatywna odpowiedź umożliwiłaby kontynuację.
Musisz być zaznajomiony ze skryptem, poleceniem lub programem, zanim beztrosko włączysz do niego yes.
Używanie yes z poleceniami
Początkowo yes było używane z innymi poleceniami w systemie Linux. Obecnie większość poleceń działa bez interakcji z użytkownikiem, przez co użycie yes nie jest już konieczne.
Na przykład, aby zainstalować aplikację w Ubuntu bez konieczności potwierdzania, użyj:
yes | sudo apt-get install fortune-mod
Możesz również użyć opcji -y (załóż, że tak) w apt-get:
sudo apt-get -y install fortune-mod
W innych dystrybucjach Linuksa sytuacja jest podobna. W Fedorze używałbyś kiedyś:
yes | yum install fortune-mod
Nowszy menedżer pakietów, dnf, również ma opcję -y:
dnf -y install fortune-mod
Podobnie jest z poleceniami cp, fsck i rm, które także mają opcje -f (wymuś) lub -y (załóż, że tak).
Kilka dalszych sztuczek yes
Możesz użyć yes z sekwencją cyfr generowaną przez seq, aby kontrolować pętlę powtarzających się działań.
To polecenie wyświetli wygenerowane cyfry w terminalu, a następnie wywoła stan uśpienia na jedną sekundę:
yes "$(seq 1 20)" | while read digit; do echo $digit; sleep 1; done
Czasami przydatne jest posiadanie dużego pliku do przetestowania, np. do użycia z poleceniem zip lub do testowania przesyłania FTP. Używając yes, możesz szybko generować duże pliki:
yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt
Wygenerowany plik zajmie około pięciu sekund na maszynie testowej. ls informuje, że ma rozmiar 557 MB, a wc pokazuje, że zawiera 12,4 miliona linii.
Aby ograniczyć rozmiar pliku, możesz dołączyć nagłówek do polecenia:
yes long line of meaningless text for file padding | head -50 > test.txt
Gdy plik test.txt zawiera 50 linii, proces zostanie zatrzymany. Nie musisz używać Ctrl + C, ponieważ zatrzymuje się automatycznie.
wc potwierdza, że plik zawiera dokładnie 50 linii, 400 słów i ma rozmiar 2350 bajtów.
Mimo że polecenie yes może nie być częścią codziennego zestawu narzędzi, jest niezwykle proste i przydatne w odpowiednich sytuacjach – a wszystko to w sześciu linijkach kodu.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.