Bagaimana cara menempelkan kode bash multi-baris ke terminal dan menjalankan semuanya sekaligus?

107

Saya perlu menempelkan kode bash multi-baris ke terminal, tetapi setiap kali saya melakukannya, setiap baris dijalankan sebagai perintah terpisah segera setelah ditempel.

Nathan
sumber

Jawaban:

111

Coba letakkan \di akhir setiap baris sebelum menyalinnya.

Contoh:

echo "Hello world" && \
script_b.sh

echo $?

Kode keluar ( $?) sekarang merupakan urutan lengkap dari perintah, dan bukan hanya perintah terakhir.

opsguy
sumber
21
Catatan: spasi tambahan akan merusaknya!
Max Reeder
54

Saya sangat terkejut jawaban ini tidak ditawarkan di sini, saya sedang mencari solusi untuk pertanyaan ini dan saya pikir ini adalah pendekatan termudah, dan lebih fleksibel / pemaaf ...

Jika Anda ingin menempelkan beberapa baris dari situs web / editor teks / dll., Ke dalam bash, terlepas dari apakah itu perintah per baris atau fungsi atau seluruh skrip ... cukup mulai dengan a (dan diakhiri dengan a )dan Enter, seperti pada contoh berikut:

Jika saya memiliki gumpalan berikut

function hello {
    echo Hello!
}
hello

Anda dapat menempel dan memverifikasi di terminal menggunakan bash dengan:

  1. Dimulai dengan (

  2. Menempelkan teks Anda, dan menekan Enter (untuk membuatnya cantik) ... atau tidak

  3. Mengakhiri dengan a )dan menekan Enter

Contoh:

imac:~ home$ ( function hello {
>     echo Hello!
> }
> hello
> )
Hello!
imac:~ home$ 

Teks yang ditempelkan secara otomatis dilanjutkan dengan persiapan >untuk setiap baris. Saya telah menguji dengan banyak baris dengan perintah per baris, fungsi, dan seluruh skrip. Semoga ini membantu orang lain menghemat waktu!

TryTryAgain
sumber
4
metode termudah IMO
Hobroker
1
@Toolkit untuk hal-hal sederhana ini akan berfungsi seperti yang Anda jelaskan, tetapi solusi yang saya tawarkan akan berfungsi untuk situasi yang lebih kompleks (jeda baris, banyak fungsi, seluruh skrip, dll.)
TryTryAgain
1
Ini menjalankan perintah yang ditempelkan di subkulit, jadi sering kali tidak benar-benar melakukan apa yang Anda inginkan. Anda dapat menggunakan tanda kurung alih-alih tanda kurung untuk memaksanya berjalan di shell saat ini; tapi sungguh, jangan lakukan keduanya. Cangkangnya bisa mengatasinya.
tripleee
33

Jika Anda menekan C-x C-eperintah yang akan membuka editor default Anda yang ditentukan .bashrc, setelah itu Anda dapat menggunakan semua fitur canggih dari editor Anda. Ketika Anda menyimpan dan keluar, garis akan menunggu Anda masuk.

Jika Anda ingin mendefinisikan editor Anda, tulis saja untuk Ex. EDITOR=emacs -nwatau EDITOR=vidi dalam~/.bashrc

itirazimvar
sumber
2
Teknik ini berguna, tetapi perhatikan bahwa editor harus berjalan serentak (seperti emacsdan yang vidilakukan), dan saat menyimpan dan keluar, perintah akan dijalankan secara instan .
mklement0
16

Selain backslash, jika garis diakhiri dengan |atau &&atau ||, itu akan dilanjutkan pada baris berikutnya.

glenn jackman
sumber
12

Tambahkan tanda kurung di sekitar baris. Contoh:

$ (
sudo apt-get update
dokku apps
dokku ps:stop APP # repeat to shut down each running app
sudo apt-get install -qq -y dokku herokuish sshcommand plugn
dokku ps:rebuildall # rebuilds all applications
)
abrkn
sumber
2
Perhatikan, seperti paranthesis (, kawat gigi {juga akan bekerja sama dalam contoh di atas
GypsyCosmonaut
2
Ini sepertinya menduplikasi jawaban sebelumnya di halaman ini
tripleee
12

Kemungkinan lain:

bash << EOF
echo "Hello"
echo "World"
EOF
Lenar Hoyt
sumber
4

Untuk mencegah baris perintah yang panjang dalam file teks, saya menyimpan cuplikan copy-pase saya seperti ini:

echo a;\
echo b;\
echo c
nvd
sumber
0

Coba cara ini:

echo $( 
    cmd1
    cmd2
    ...
)
voltento.dll
sumber
0

iTerm menangani perintah banyak baris dengan sempurna, ini menyimpan perintah banyak baris sebagai satu perintah, kemudian kita dapat menggunakan Cmd+ Shift+ ;untuk menavigasi riwayat.

Lihat lebih banyak tip iTerm tentang Bekerja secara efektif dengan iTerm

jeffery.yuan
sumber
-1

Mencoba

out=$(cat)

Kemudian tempel baris Anda dan tekan Ctrl-D (masukkan karakter EOF). Semua masukan hingga Ctrl-D akan dialihkan ke cat's stdout.

sspprroo
sumber
coba ini: $ out=$(cat) && eval "$out". tekan enter setelah baris terakhir lalu CTRL + D seperti yang disarankan di atas.
Mohamed Bana