Jaki jest sens polecenia „tak”?

39

Jest to yeskomenda w Unix / Linux, która w zasadzie nieskończenie drukuje ydo stdout. Jaki jest tego sens i jak jest przydatny?

Cemre
źródło
Kilka dodatkowych możliwości tutaj .
1
możliwy duplikat Jaki jest sens polecenia „tak”? ... (Oznacz to jako duplikat, ponieważ lepiej zadać inne nowe pytanie i lepiej na nie odpowiedzieć).
Aditya
Dotyczące: unix.stackexchange.com/q/257297/117549
Jeff Schaller

Odpowiedzi:

41

tak może być użyte do wysłania odpowiedzi twierdzącej (lub negatywnej; np. tak n) na każde polecenie, które w innym przypadku zażądałoby jednego, powodując w ten sposób, że polecenie nie będzie działać interaktywnie.

Polecenie tak w połączeniu z poleceniem head może być użyte do wygenerowania dużych plików do celów testowania.

Można go również użyć do przetestowania, jak dobrze system radzi sobie z dużymi obciążeniami, ponieważ użycie tak powoduje 100% wykorzystanie procesora, w systemach z jednym procesorem (w przypadku systemu wieloprocesorowego proces musi być uruchomiony dla każdego procesora). Może to być przydatne na przykład do sprawdzenia, czy system chłodzenia systemu będzie skuteczny, gdy procesor będzie działał na 100%.

W 2006 r. Polecenie „tak” otrzymało rozgłos jako środek do sprawdzenia, czy na MacBooka użytkownika występuje zespół przerywany. Dwukrotne uruchomienie polecenia tak za pośrednictwem terminala w systemie Mac OS X umożliwiło maksymalne wykorzystanie mocy obliczeniowej procesora komputera, a tym samym sprawdzenie, czy awaria była związana z wysoką temperaturą

przez wikipedia: http://en.wikipedia.org/wiki/Yes_(Unix)

d3vin
źródło
9
Aby uzyskać dodatkowe obrażenia, spróbujyes `yes yes`
sendmoreinfo
3
@sendmoreinfo Evil
Tobias Kienzler
och, to niezły test warunków skrajnych. właśnie spróbowałem, a potem pobiegłem do mojego kolegi z prośbą o nowy vm xD
Toastgeraet
17

Może to być kontrowersyjna opinia, ale moim zdaniem jest to brzydka naprawa złego interfejsu użytkownika w narzędziach wiersza poleceń .

Niektóre narzędzia wiersza poleceń zadają pytania użytkownikowi bez pytania i nie mają opcji uruchamiania w trybie nieinteraktywnym; wyobraź sobie na przykład coś takiego

$ frobnicate *
frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
...

Ponieważ odpowiedź na pytanie pochodzi ze standardowego wejścia, szybkim rozwiązaniem tego problemu jest posiadanie aplikacji, która y\nnieprzerwanie wysyła ciąg znaków , co jest dokładnie tym, co yesrobi. Unix rury mogą być wykorzystywane do wysyłania tego wyjścia jako wejście do danego polecenia.

$ yes | frobnicate

Jednym z problemów związanych z tym podejściem jest to, że yesnie ma możliwości sprawdzenia pytania, na które odpowiada:

frobnicate file a.txt? (y/n) y
frobnicate file b.txt? (y/n) y
format device /dev/sda1? (y/n) y
frobnicate file c.txt? (y/n) y

Lepszym rozwiązaniem, jeśli jest dostępne, jest konkretna opcja do uruchamiania bez interakcji, np. rm -fLub apt-get -y. Umożliwia to kodowanie bardziej sensownego zachowania w aplikacji.

Federico Poloni
źródło
1
Przeczytałem wszystkie pozostałe odpowiedzi. Zgadzam się całkowicie z twoich wrt brzydkiego fix ... choć nie posiada ważnego wykorzystać do testowania reakcji komputera na wysokie obciążenia procesora.
Wildcard
6
Oczywiście możesz użyć zastrzeżonego oprogramowania „Microsoft Windows” do przetestowania reakcji komputera na wysokie obciążenia procesora, ale „tak” to oprogramowanie typu open source.
Wildcard
1
Jest to jedna z najpiękniejszych brzydkich poprawek
Jezzamon
4

Lubię używać, yesgdy rozpakowuję wiele plików .zip, które zawierają ten sam plik o tej samej nazwie, i jestem pytany, co robić w każdym przypadku (np. Umowa licencyjna).

yes | for z in *.zip; do unzip "$z"; done 
daloonik
źródło
2

Właśnie spotkałem się z innym zastosowaniem: lubiłem wymazywać dysk twardy z innym wzorcem niż tylko zera (jak: dd if = / dev / zero of = / dev / sdd bs = 1M) i użyłem „tak”:

yes UUUUUUUUUUUUU > /dev/sdd

użytkownik1724834
źródło
1

Współpracownik wykorzystał to w nowatorski sposób do wprowadzenia hasła

yes password | passwd
frogstarr78
źródło
passwdpoprosi najpierw o stare hasło, jeśli użytkownik nie jest rootem ani superużytkownikiem i nie będzie kontynuował, dopóki nie zostanie wprowadzone prawidłowe hasło. Więc albo użytkownik jest rootem, albo passwordjest też starym hasłem i nic się nie zmienia.
Michael Konietzka,
@MichaelKonietzka rzeczywiście. Ale przy wspomnianych warunkach jest to nadal przydatny przypadek użycia.
frogstarr78
3
Tyle że pozostanie w historii w postaci zwykłego tekstu. Crazeyyy.
Gleno,
3
@Gleno w bashu, możesz poprzedzić go spacją, aby zapobiec jego zapisaniu (jak w stackoverflow.com/q/640403/118153 )
Iiridayn
2
Ponadto powoduje to wyciek hasła do wszystkich lokalnych użytkowników na liście procesów ( pslub topw odpowiednim momencie).
Federico Poloni