Jak wykonać kilka poleceń jeden po drugim za pomocą jednego żądania do terminala (bez użycia pliku)?

22

Mógłbym (1) przygotować plik z wpisanymi poleceniami oddzielonymi linią końcową, (2) uczynić go wykonywalnym, (3) uruchomić go z menedżera systemu plików lub terminala.

Jest to jednak niedorzeczne, jeśli zestaw poleceń nie jest powtarzalny i za każdym razem.

Czy zamiast tego mogę wpisać te polecenia do terminala w jednym żądaniu?

Nie znam znaku końca linii dla terminala - Ctrl, Shift lub Alt z Enter nie działa.  

Esamo
źródło
1
W wierszu poleceń polecenia można rozdzielić średnikiem.
John1024

Odpowiedzi:

27

Możesz rozdzielić polecenia za pomocą &&lub ;.

  • && uruchamia następne polecenie tylko wtedy, gdy poprzednie zakończyło się statusem 0 (powiodło się):

    command1 && command2 && command3
    
  • ; uruchamia wszystkie polecenia, nawet jeśli poprzednie kończy działanie ze statusem niezerowym:

    command1; command2; command3
    

Możesz łączyć te separatory według własnego uznania.

MrVaykadji
źródło
6
dla command1 && command2polecenia 2 zostanie wykonane tylko wtedy, gdy polecenie 1 zakończy się powodzeniem.
souravc
Ładne dyskusje, odpowiednie / podobne posty: askubuntu.com/questions/334994/… stackoverflow.com/questions/13077241/…
gevang
@souravc: Dokonałem edycji, dzięki, nauczyłem się czegoś.
MrVaykadji
jeśli łączymy sudo apt upgradei sudo systemctl reboot, czy musielibyście dodać „sudo” dwa razy, czy też „zapamięta” sudo dla drugiego polecenia?
Koen
9

Jeśli chcesz wpisać każde polecenie w osobnym wierszu w jednym żądaniu, możesz użyć następującej metody:

  • Rozpocznij swoją prośbę (pierwszy wiersz) od if :; then(to znaczy: jeśli prawda, to zrób) i naciśnij Enter; twój monit zmieni się teraz >i nic nie zostanie wykonane.

  • Wpisz swoje polecenia, a następnie każde Enter

  • Zakończ żądanie za pomocą fi(koniec powyższego ifwarunku) i naciśnij Enter. Teraz wszystkie twoje polecenia będą wykonywane w podanej kolejności.

Przykład:

radu@Radu: ~ $ if :; then
> echo 'something'
> echo 'something else'
> echo 'List current directory contents:'
> ls
> echo 'Change current directory with root directory:'
> cd
> #finish
> fi
something
something else
List current directory contents:
Backups            Desktop           forma3d  Public      Untitled txt.txt~
bin                Documente         Music    Templates   Videos
configuration.php  examples.desktop  passwd~  tmp~
Downloads          file~             Poze     Ubuntu One
Change current directory with root directory:
radu@Radu: / $
Radu Rădeanu
źródło
if true; thenmoże być bardziej czytelny, jeśli jest to pożądane. na pierwszy rzut oka :można pomylić ;.
kiri
4

Najpierw umieść {na własnej linii.
Następnie wstaw swoje polecenia.
Następnie wstaw }nowy wiersz i naciśnij Enter. Twoje polecenia zostaną wykonane.

Przykład:

{
echo list
echo of
echo commands
echo to run at once
}

który wydrukuje (wszystkie naraz, bez monitu pomiędzy):

list
of
commands
to run at once

Na marginesie, { .. }jest składnia grupowania poleceń Bash. Jest to często przydatne w połączeniu z &&lub ||(odpowiednio „i” oraz „lub”)

kiri
źródło
Czy to to samo, co if :; thenjuż wspomniano? Czy jest to nieco inne?
MrVaykadji
1
@MrVaykadji To ten sam wynik, ale inna metoda. if :uruchamia test na komendzie null, która zawsze zwróci true. { .. }po prostu grupuje polecenia razem. Osobiście uważam, że { .. }łatwiej zapamiętać.
kiri