Solusi 1:
!
adalah karakter khusus untuk bash, digunakan untuk merujuk ke perintah sebelumnya; misalnya,
!rm
akan memanggil dan menjalankan perintah terakhir yang dimulai dengan string "rm", dan
!rm:p
akan mengingat tetapi tidak menjalankan perintah terakhir yang dimulai dengan string "rm". bash menafsirkan tanda seru di echo "reboot your instance!"
sebagai "ganti di sini perintah terakhir yang dimulai dengan karakter tepat setelah tanda seru ", dan mengomel kepada Anda bahwa ia tidak dapat menemukan peristiwa (perintah) dalam riwayat Anda yang dimulai dengan satu tanda kutip ganda.
Coba
echo reboot your instance\!
untuk melindungi (melarikan diri) tanda seru dari bash.
Solusi 2:
Anda dapat menonaktifkan penggantian histori menggunakan set +H
.
Solusi 3:
Untuk mengatasi masalah awal Anda, coba gunakan tanda kutip tunggal, bukan tanda kutip ganda. Dengan yang terakhir, bash akan mencoba memperluas karakter tertentu sebelum meneruskan hasilnya ke perintah (echo dalam hal ini). Dengan tanda kutip tunggal, bash melewati seluruh string, tidak berubah.
!
digunakan dalam perintah untuk merujuk ke riwayat baris perintah. Lihat:http://tldp.org/LDP/abs/html/abs-guide.html#HISTCOMMANDS untuk set lengkap. Dengan contoh di atas, bash mencoba memperluas !"
sebagai referensi ke suatu peristiwa sebelum gema terlihat, maka kesalahannya.
Perhatikan bahwa dalam skrip, semua dari perintah riwayat dinonaktifkan, karena hanya masuk akal di shell interaktif.
Satu-satunya yang saya gunakan secara teratur adalah !$
. Itu meluas ke argumen terakhir dari perintah sebelumnya. Ini adalah steno yang berguna di beberapa tempat.
Solusi 4:
Cukup beri spasi di antara !
dan "
daripada itu akan berhasil.
Solusi 5:
Ya, ! adalah karakter khusus untuk bash, digunakan untuk merujuk ke perintah sebelumnya.
Beberapa cara untuk menangani situasi ini
Berikut ini akan menampilkan string apa adanya
echo 'Reboot your instance!'
Berikut ini akan menjalankan perintah dan menggabungkan string
echo 'escaping #'" adding `which python` to the string"
echo '#!'`which python`