Chciałbym wielokrotnie powtarzać, zmieniać i / lub przełączać się między wieloma poleceniami; w rodzaju wzoru lub pętli. Pożądany efekt końcowy można uznać za zupełnie odmienny watch
.
Eksperymentowałem z odmianami tej podstawowej formuły; ale czegoś brakuje, źle lub w inny sposób:
for x in {1..60};
do
<first command> &&
sleep 1 &&
<second command>;
done
Myślę, że to tylko powtórzenie ( do
ing) <first command> &&
sześćdziesiąt razy, a następnie wszystkie kolejne operacje tylko raz, jak zwykle. Próbowałem kilku różnych rzeczy; jak używanie {
nawiasów klamrowych }
, '
cytatów '
, "
cytatów "
i tak dalej; próbując zgrupować polecenia razem, bez powodzenia.
&&
Może być problem, ponieważ wymaga udanego status wyjścia. Czy chcesz, aby zakończyło się pierwsze polecenie, a następnie, jeśli pierwsze polecenie zakończyło się powodzeniem, zrób tosleep 1
, lub wykonaj je,sleep 1
dopóki pierwsze polecenie zakończy się w tle, niezależnie od kodów wyjścia?Odpowiedzi:
To działa dla mnie:
Działa to również dla mnie:
Jakie są twoje pozostałe dwa polecenia?
źródło
Jednym prostym sposobem na to jest umieszczenie każdego polecenia w elemencie tablicy:
A następnie iteruj:
${foo[0]}
rozwija się doecho "hello"
, który jest następnie wykonywany.źródło
Można to również zrobić w trybie bash lub zsh w trybie emacsa poprzez control+o:
Następnie użyj nawigacji historii, aby dostać się do polecenia
echo a
(lub odpowiedniego), a następnie control+okilka razy. Polecenia z miejsca, w którym przeszedłeś do ostatniego, należy powtórzyć i zapętlić dla każdego z nich ponownie control+o.źródło
W porządku, chyba to rozgryzłem.
Myślę, że muszę tylko dodać kolejną
&& sleep 1
pomiędzy<second command>
i; done
.Coś jak:
źródło
set -e
na początku i nie rezygnujesz z nich&&
?&&
,||
i;
aby być uciążliwe lub cokolwiek; Trochę lubię wskazówki wizualne.