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.  


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.


6
dla command1 && command2polecenia 2 zostanie wykonane tylko wtedy, gdy polecenie 1 zakończy się powodzeniem.
souravc


@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: / $

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”)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.