Ketika saya berlari
curl | tee test.txt; echo ${PIPESTATUS[0]}
Saya melihat dengan benar
curl: coba 'curl --help' atau 'curl --manual' untuk informasi lebih lanjut
2
Tetapi ketika saya mencoba menjalankan perintah yang persis sama menggunakan '/ bin / sh':
sh -c "curl | tee test.txt; echo \${PIPESTATUS[0]}"
saya mendapat
curl: coba 'curl --help' atau 'curl --manual' untuk informasi lebih lanjut
sh: 1: Substitusi buruk
Bagaimana kita bisa menyelesaikannya Bad substitution
masalah, tolong?
sh -c "<your above link answer's scripts here>"
?Jawaban:
Anda menyelesaikannya dengan tidak menggunakan
sh
.Itu
PIPESTATUS
variabel khusus, dan${var[idx]}
array sintaksis secara umum, adalah fitur khusus untuk Bash shell. Mereka tidak ada di POSIX SH , dan bahkan mengupas itu melakukan memiliki array mungkin menggunakan sintaks yang berbeda.Kebetulan beberapa distro Linux bersinkronisasi
/bin/sh
ke Bash. Namun, distribusi lain menghubungkannya dengan berlari , Debian Almquist Shell. Keduanya kompatibel dengan POSIX SH skrip, tetapi hanya Bash yang menerima${PIPESTATUS[…]}
sintaksis.Jadi, jika Anda ingin menggunakannya, jalankan
bash -c "…"
sebagai gantinya.sumber
sh
. Jawaban yang lebih baik di bawah, dengan retasan. Tapi bukan "solusi" yang lebih baik (saya akan setuju bahwa solusi yang lebih baik adalah menghindarish
)Workaound untuk '/ bin / sh' atau busybox
Lacak:
sumber
Juga 'bash -c' tampaknya memiliki masalah dengan itu ketika dipanggil dari tcsh:
bash -c "curl | tee test.txt; echo \${PIPESTATUS[0]}"
Ini bekerja untuk saya dari tcsh:
bash -c 'curl | tee test.txt; echo ${PIPESTATUS[0]}'
GNU bash, versi 4.2.25 (1) -release (x86_64-pc-linux-gnu)
dipanggil dari tcsh 6.17.06
sumber