cara menjaga umpan baris dalam hasil dikembalikan oleh perintah bash

3

katakanlah, saya dapat rsh ke mesin XXX sebagai pengguna foo, lalu setelah menjalankan:

$result=$(rsh -l foo XXX "ls");
echo $result;

Saya menemukan bahwa umpan baris dihapus dalam hasil, dan saya tidak dapat melihat hasilnya dalam cara baris demi baris. jadi apa yang harus saya lakukan jika saya ingin memiliki umpan baris ke dalam hasil yang dikembalikan?

HaiYuan Zhang
sumber
Anda seharusnya tidak memiliki tanda dolar di depan nama variabel ketika Anda menetapkannya. rsh=$(rsh -l foo XXX "ls"). Tanda titik koma adalah mubazir tetapi tidak berbahaya.
tripleee

Jawaban:

5

Baris baru ada di sana; kesalahan dalam menggunakannya echountuk memeriksanya (tanpa tanda kutip ganda di sekitar variabel, juga!)

result=$(rsh -l foo XXX "ls")
echo "$result"

Dalam kasus sepele, Anda dapat pergi tanpa tanda kutip, tetapi kasus yang menarik bahkan mungkin berisi masalah keamanan.

Jika Anda hanya menangkap output standar rshsehingga Anda dapat mencetaknya sendiri ke output standar, ini adalah penggunaan yang tidak bergunaecho

tripleee
sumber
Mungkin juga lebih suka sshlebih rshdan tidak menggunakan lsdalam skrip.
tripleee
1

Sunting: Jika Anda bermaksud baris baru di antara setiap file, pastikan untuk mengutip hasilnya:

result="$(rsh -l foo XXX "ls");"

Ini akan menyimpan karakter apa pun kecuali NUL ( $'\0'), yang tidak dapat disimpan dalam variabel Bash.

Jika Anda maksudkan bahwa trailing newline hilang, maka ini adalah solusi paling sederhana yang saya tahu:

resultx="$(commands...; echo x)"
result="${resultx%x}"
l0b0
sumber