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.

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.


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!


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


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.


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
)

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


4

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

echo a;\
echo b;\
echo c


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


-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.


coba ini: $ out=$(cat) && eval "$out". tekan enter setelah baris terakhir lalu CTRL + D seperti yang disarankan di atas.
Mohamed Bana
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.