Próbuję wymyślić prosty sposób ponownego wykonywania polecenia za każdym razem, gdy kończy się, z dowolnego powodu (błąd lub inny).
Jaki byłby najlepszy sposób na to?
EDYCJA: Wcześniej nie byłem wystarczająco jasny. Potrzebuję kolejnej realizacji, aby poczekać, aż zakończy się poprzednia.
EDYCJA 2: Prawie wszystkie odpowiedzi działają świetnie. Pomyślałem, że większość odpowiedzi albo rozwinie proces, albo wykona go ponownie tylko raz, żadna z nich nie jest pożądana.
Odpowiedzi:
Tworzy to nieskończoną pętlę, wykonującą
command
się w kółko.źródło
while true; do echo 'Hit CTRL+C'; sleep 1; done
dzięki cyberciti.biz/faq/bash-infinite-loopwatch
Komenda będzie powtarzać polecenia zawsze w odstępie określonym:Ustawienie wartości
-n
zero powoduje, że interwał jest zerowy (myślę, że to naprawdę 0,1 sekundy).watch
ma również dodatkowe zalety wyrównania wydruku, dzięki czemu zmiany wizualne można łatwo zobaczyć, a także przełącznik do podświetlania zmian z ostatniego uruchomienia.Odniesienie: strona man watch :
źródło
watch ls
w katalogu zawierającym pliki, nic nie dostajesz?Prostym rozwiązaniem byłoby:
;
rozdziela polecenia, pozwalając na wiele poleceń w jednym wierszu ( Bash: Listy )!#
każe bashowi „powtórzyć wszystko, co do tej pory napisałem w tym wierszu” ( Bash: Design-Event )źródło
yourcommand; !!
wydaje się, że tak naprawdę nie działa z poleceniami w tej samej linii!#
. Twoje zdrowie!; !#
nie działało na ZSH, po prostu rozszerza oświadczenie zasadniczo klonując je, nie uruchamia goMożesz planować z wyprzedzeniem podczas wykonywania polecenia (pod warunkiem, że nie jest ono interaktywne) i wprowadzić,
!!
który ponownie wykona poprzednie polecenie. Działa to npping -c 5
. Podczas .Możesz także zdefiniować funkcję w
bash
:Aby go zachować, zapisz go w
~/.bashrc
.Następnie możesz uruchomić polecenie w następujący sposób:
Jeśli jest to określone polecenie, które chcesz wielokrotnie wykonywać (a nie np. Dowolne polecenie), możesz zastąpić
"$@"
w tym fragmencie swoim rzeczywistym poleceniem irepeat_ping
zamiast tego nazwać funkcję np .Aby stworzyć nieskończoną pętlę, możesz zrobić to, co sugeruje @Dennis. Zalecam dodanie okresu oczekiwania, jeśli zamierzasz użyć tego w interaktywnej powłoce, takiej jak ta:
W przeciwnym razie przerywanie tej nieskończonej pętli jest raczej niewygodne
Ctrl-Z
.źródło
Nadaj
while
pętli warunek logiczny, taki jak:Będzie to wykonywane w kółko, dopóki bash nie otrzyma sygnału do zakończenia procesu. Zwykle w formie
ctrl+c
.Możesz także użyć
watch
polecenia do wielokrotnego uruchamiania skryptu. Na przykład prosty zegar w twoim terminalu bashwatch
może wyglądać następująco:Ta
-t
opcja informuje,watch
aby nie wyświetlać tytułu uruchomionego procesu. Zapewnia to czyste wyjście tylko z powtarzanego polecenia. Ta-n1
opcja każe zegarkowi powtarzać się con
sekundę. W takim przypadku-n1
będą odstępy1
sekundowe. Następniedate +%T
polecenie pokazuje czas w momencie zakończenia polecenia. Wykonanie tego polecenia da ci aktywny zegar w twoim terminalu.I jeszcze jedna metoda, której nie ma w żadnej innej odpowiedzi, byłaby nieskończonym wywołaniem funkcji.
Jest to w zasadzie to samo, co
while
pętla boolowska tylko przy użyciu rekurencyjnych wywołań funkcji.(edytuj) Aby mieć na uwadze zasoby twojego komputera, dodałem
&& wait
tak, że za każdym razem, gdy proces jest uruchamiany, pętle będą „czekać”, aż proces zakończy się ze statusem wyjścia 0 przed następną iteracją. Jest to przydatne w interaktywnym skrypcie powłoki.źródło
while
przykład pętli, ale nie używa ontrue
składni boolowskiej . Jestwatch
przykład, ale nie daje wielu przydatnych składni. Rozumiem tych, dla których może pomóc. Chciałem nadać im praktyczną przydatność.while
Logiczna pętla może być teżfalse
i nie wykonywać dopóki warunek jest spełniony nieprawdziwe. Jest to całkiem przydatne.if
ponowne wykonywanie?if
instrukcji.To kolejna metoda, której używam do powtarzania polecenia w bash. Dla niektórych może to zabrzmieć głupio, ponieważ nie wymaga napisania scenariusza i może być znane wielu. Ale myślę, że warto o tym wspomnieć, ponieważ jest szybki i przyjazny dla początkujących, w tym sensie, że nie ma wiele składni do zapamiętania. Testowałem to tylko w gnome-terminal Ubuntu i inne terminale mogą tego nie obsługiwać.
Nie musisz czekać, aż wkleisz wszystkie polecenia. Wklejone polecenia wpadają do kolejki i wykonują je jedna po drugiej.
źródło
Dzisiaj czuję się pyskaty.
Przeczytaj jeden z nieskończonych strumieni i potokuj go
xargs
Jeśli chcesz zrobić sobie przerwę, prawdopodobnie będziesz musiał wykonać
sh
źródło