Bash menampilkan tanda kutip tunggal sehingga menunjukkan perintah yang sintaks inputnya valid. Itu tidak menjalankan perintah yang berisi tanda kutip tunggal ini dalam parameter ke ssh
perintah.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
memberitahu Anda bahwa 4 parameter terakhir dari perintah ssh adalah "sudo
, /home/pi/shared/blink.sh
, 27
dan off"
.
Pada host jarak jauh, daemon ssh menggabungkan kata-kata dari perintah dengan spasi sebagai pemisah, sehingga perintah jarak jauh yang Anda jalankan adalah
"sudo /home/pi/shared/blink.sh 27 off"
Upaya ini untuk mengeksekusi perintah yang namanya sudo /home/pi/shared/blink.sh 27 off
, yang tentu saja tidak ada.
Hapus tanda kutip ganda dari definisi Anda tentang testvar
.
Tidak masalah di sini, tetapi mungkin penting dalam kasus Anda yang sebenarnya: alih-alih ${testvar}
, tulis "$testvar"
(atau "${testvar}"
jika Anda mau, tetapi kurung kurawal opsional). Selalu beri tanda kutip ganda di sekitar substitusi variabel kecuali Anda tahu mengapa Anda harus mengabaikannya. "$testvar"
memperluas ke nilai variabel testvar
, sedangkan $testvar
ketika tidak dalam tanda kutip ganda memperlakukan nilai testvar
sebagai daftar pola glob yang dipisahkan oleh spasi.
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Shell membagi nilai variabel menjadi kata-kata. Buat tanda kutip ganda untuk mencegah pemisahan. Lihat perbedaannya:
sumber