Bagaimana cara menjalankan beberapa perintah satu sama lain dengan satu permintaan ke terminal (tanpa menggunakan file)?

22

Saya dapat (1) menyiapkan file dengan perintah yang diketik yang dipisahkan oleh end-line, (2) membuatnya dapat dieksekusi, (3) menjalankannya dari manajer sistem file atau terminal.

Tapi ini konyol untuk set perintah yang tidak dapat diulang dan setiap waktu.

Bisakah saya mengetik perintah-perintah itu ke terminal dalam satu permintaan saja?

Saya tidak tahu karakter garis akhir untuk terminal - Ctrl, Shift atau Alt dengan Enter tidak berfungsi.  

Esamo
sumber
1
Pada baris perintah, perintah dapat dipisahkan dengan titik koma.
John1024

Jawaban:

27

Anda dapat memisahkan perintah dengan &&atau ;.

  • && hanya menjalankan perintah berikutnya jika yang sebelumnya keluar dengan status 0 (berhasil):

    command1 && command2 && command3
    
  • ; menjalankan setiap perintah, bahkan jika yang sebelumnya keluar dengan status bukan nol:

    command1; command2; command3
    

Anda dapat menggabungkan pemisah ini sesuai keinginan.

TuanVaykadji
sumber
6
untuk command1 && command2command2 hanya akan dieksekusi jika command1 berhasil.
souravc
Diskusi yang menyenangkan, posting yang relevan / serupa: askubuntu.com/questions/334994/... stackoverflow.com/questions/13077241/…
gevang
@souravc: Saya mengedit, terima kasih, saya belajar sesuatu.
MrVaykadji
jika menggabungkan sudo apt upgradedan sudo systemctl reboot, apakah Anda perlu menambahkan 'sudo' dua kali, atau akankah 'mengingat' sudo untuk perintah kedua?
Koen
9

Jika Anda tertarik untuk mengetik setiap perintah pada barisnya sendiri dalam satu permintaan tunggal, Anda dapat menggunakan metode berikut:

  • Mulai permintaan Anda (baris pertama) dengan if :; then(artinya: jika benar, maka lakukan) dan tekan Enter; prompt Anda akan berubah sekarang >dan tidak ada yang akan dieksekusi.

  • Ketik perintah Anda, masing-masing diikuti oleh Enter

  • Selesaikan permintaan Anda dengan fi(akhir dari ifkondisi di atas ) dan tekan Enter. Sekarang semua perintah Anda akan dieksekusi dalam urutan yang diberikan.

Contoh:

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
sumber
if true; thenmungkin lebih jelas untuk dibaca jika diinginkan. :mungkin bingung dengan ;pandangan sekilas.
kiri
4

Pertama, letakkan {di barisnya sendiri.
Kemudian, masukkan perintah Anda.
Kemudian, letakkan }di baris baru dan tekan Enter. Perintah Anda akan dieksekusi.

Contoh:

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

yang akan mencetak (sekaligus, tanpa prompt di antaranya):

list
of
commands
to run at once

Sebagai catatan, { .. }adalah sintaks pengelompokan perintah Bash. Ini sering berguna dalam hubungannya dengan &&atau ||(masing-masing 'dan', dan 'atau')

kiri
sumber
Apakah itu sama dengan yang if :; thensudah disebutkan? Atau sedikit berbeda?
MrVaykadji
1
@MrVaykadji Ini hasil yang sama, tetapi metode yang berbeda. if :menjalankan tes pada perintah nol, yang akan selalu mengembalikan true. { .. }hanya kelompokkan perintah bersama. Saya pribadi { .. }lebih mudah diingat.
kiri