GNU/Linux >> Belajar Linux >  >> Linux

Perilaku Tak Terduga Dari Skrip Shell?

Pertanyaan ini sudah memiliki jawaban di sini :SSH menyebabkan while loop berhenti

(1 jawaban)
Tutup 4 tahun yang lalu.

Saya punya dua skrip:

foo.sh:

#!/bin/bash
echo -e "onentwo" |
while read line; do
    cat not-existing
    echo hello $line
done

bar.sh:

#!/bin/bash
echo -e "onentwo" |
while read line; do
    ssh [email protected] 'cat not-existing' # Here is the only difference
    echo hello $line
done

Dan sekarang saya menjalankannya

$ ./foo.sh 
cat: not-existing: No such file or directory
hello one
cat: not-existing: No such file or directory
hello two

$ ./bar.sh 
cat: not-existing: No such file or directory
hello one

Keluaran dari bar.sh mengejutkan bagi saya. Saya berharap itu sama untuk kedua skrip.

Mengapa keluaran foo.sh dan bar.sh berbeda? Apakah itu bug atau fitur?

Catatan

Berikut ini berfungsi seperti yang saya harapkan, yaitu output dari ini sama dengan output foo.sh :

#!/bin/bash
for line in `echo -e "onentwo"`; do
    ssh [email protected] 'cat not-existing'
    echo hello $line
done

Mengapa?

Jawaban yang Diterima:

Di bar.sh , two dikonsumsi oleh ssh . Pada contoh terakhir, output lengkap dari echo digunakan oleh for sebelum mulai mengulang.

Untuk menghindari ssh melahap data Anda dari input standar, gunakan ssh -n . Ini akan menghubungkan input standar ssh dengan /dev/null daripada dengan input standar while lingkaran.

Ini akan melakukan apa yang Anda harapkan:

#!/bin/bash
echo -e "onentwo" |
while read line; do
    ssh -n [email protected] 'cat not-existing' # Here is the only difference
    echo hello $line
done

Jika Anda telah menulis

#!/bin/bash
echo -e "onentwo" |
while read line; do
    ssh [email protected] 'cat'
    echo hello $line
done

lalu cat pada mesin jarak jauh akan menghasilkan two karena input standarnya diturunkan dari ssh yang pada gilirannya mendapatkannya dari loop dan echo . Ini akan mencetak two daripada one karena baris pertama input sudah dikonsumsi oleh read .


Linux
  1. Ssh – Skrip Shell Untuk Masuk Ke Server Ssh?

  2. Waktu Habis Dalam Skrip Shell?

  3. Script Shell Dengan Fungsi Dan Parameter Sebagai Variabel?

  1. Eof Tak Terduga Saat Mencari Yang Cocok `”‘ – Bash Script?

  2. Script Shell Hang Pada Perintah Mail?

  3. Edit skrip shell saat sedang berjalan

  1. Cegah ssh agar tidak memecah parameter skrip Shell

  2. Direktori skrip Shell saat ini?

  3. Tambahkan baris ke file /etc/hosts dengan skrip Shell