Uruchamianie .sh w celu wykonania wielu poleceń

9

Byłem ciekawy, jak mógłbym uruchomić wiele poleceń za pomocą skryptu powłoki.

Na przykład, aby to wypróbować, chciałbym móc podłączyć .desktop do .sh, który uruchomi wszystkie kody aktualizacji, więc nie muszę go wpisywać. Wiem, jak wykonać jedno polecenie przez .sh, a nie wiele.

Tak czy siak?

Brendon
źródło

Odpowiedzi:

10

Naprawdę proste - musisz rozdzielić polecenia. Na przykład to:

#!/bin/bash
sudo apt-get update
sudo apt-get upgrade

zaktualizuje listy pakietów, a następnie pakiety. Inna możliwość jest taka (prawdopodobnie lepsza, ponieważ && pozwoli uruchomić upgradekomendę tylko wtedy, gdy updatezakończy się pomyślnie) :

#!/bin/bash
sudo apt-get update && sudo apt-get upgrade

Powinno to uruchomić polecenia aktualizacji listy pakietów, a następnie samego pakietu. Musi to zostać zapisane w pliku tekstowym (np. updatescriptW katalogu domowym). Następnie możesz uczynić go wykonywalnym, uruchamiając:

 chmod +x ./updatescript

lub klikając plik prawym przyciskiem myszy i umożliwiając jego wykonanie w jego właściwościach:

i uruchom go w terminalu:

 ./updatescript

Uwaga:

Dostępna jest opcja ( -y), której można użyć z upgradepoleceniem, więc nie wyświetla monitu przed aktualizacją pakietów. Dobrym pomysłem jest sprawdzenie, co apt-getrobi, zanim zaktualizuje pakiety, ponieważ może / zrobi coś głupiego lub czegoś, czego nie chcesz. Więcej informacji na temat takich opcji można znaleźć, uruchamiając man apt-get.

Oznacza to również, że lepiej jest użyć terminala do uruchomienia skryptu, ponieważ można sprawdzić, co się aktualizuje, a następnie uruchomić. Jeśli chcesz, aby GUI uruchamiał aktualizacje, skorzystaj z centrum oprogramowania, ponieważ właśnie do tego służy.

Wilf
źródło
5

Wystarczy dodać kilka punktów do doskonałej odpowiedzi @Wilf,

możesz uruchamiać polecenia równolegle, jeśli chcesz z jakiegokolwiek powodu, na przykład autostartskrypt dla OpenBox może wyglądać następująco:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Spowoduje to ustawienie obrazu tła za pomocą nitrogen, uruchomienie panelu tint2i uruchomienie rozwijanej konsoli w stylu Quake3 tilda, wszystkie jednocześnie. Jest to przydatne, jeśli nie potrzebujesz programu do zakończenia przed uruchomieniem następnego. Nie w przypadku apt-get update, a apt-get upgradejednak!

Zwróć uwagę na &znak na końcu każdej linii. Spowoduje to, że powłoka rozwidli ten proces w tło i będzie kontynuować wykonywanie. Zauważ, że różni się od &&, który jest w zasadzie andznakiem, command_1 && command_2wykona się command_1i jeśli zakończy się sukcesem, tylko wtedy uruchomi się command_2, a command_1 & command_2rozpocznie drugi zaraz po pierwszym.


Ponadto możesz po prostu układać polecenia w stosy, aby były one wykonywane szeregowo, na przykład:

#!/bin/bash

apt-get update
apt-get upgrade

Będzie to działać apt-get upgradepo apt-get updatejest zakończona , ale niezależnie od wyniku. Tak więc nawet jeśli na przykład aktualizacja zakończy się z powodu błędu sieci, aktualizacja będzie nadal uruchomiona.

Można również zrobić to w jednym wierszu, używając ;znaku: apt-get update ; apt-get upgrade. Ponownie, to rozwiązanie nie jest optymalne dla tych konkretnych poleceń, ale może się przydać w innych sytuacjach.


Jeden szybki punkt końcowy, możesz także przełamać linie zawierające &&jako takie:

command_1 &&
command_2

Będzie to to samo, co command_1 && command_2.

kraxor
źródło