Ketika kode status tidak berguna, apakah ada cara untuk membangun pipa berdasarkan output dari stdout?
Saya lebih suka jawabannya tidak membahas use-case tetapi pertanyaan dalam lingkup scripting shell. Apa yang saya coba lakukan adalah menemukan paket paling spesifik yang tersedia di repositori dengan menebak nama berdasarkan kode negara dan bahasa.
Ambil contoh ini,
$PACKAGE1=hunspell-en-zz
$PACKAGE2=hunspell-en
Tebakan pertama lebih tepat tetapi mungkin tidak ada. Dalam hal ini, saya ingin kembali hunspell-en
( $PACKAGE2
) karena opsi pertama hunspell-en-zz
( $PACKAGE1
) tidak ada.
jalur pipa apt-cache
Perintah apt-cache
mengembalikan kesuksesan (yang didefinisikan oleh shell sebagai kode keluar nol) setiap kali perintah dapat dijalankan (dari dokumen apt-cache
)
apt-cache mengembalikan nol pada operasi normal, 100 desimal pada kesalahan.
Itu membuat menggunakan perintah dalam pipa lebih sulit. Biasanya, saya mengharapkan pencarian paket setara dengan 404 untuk menghasilkan kesalahan (seperti yang akan terjadi dengan curl
atau wget
). Saya ingin mencari untuk melihat apakah ada paket, dan jika tidak kembali ke paket lain jika ada .
Ini tidak menghasilkan apa-apa, karena perintah pertama mengembalikan kesuksesan (jadi rhs dalam yang ||
tidak pernah berjalan)
apt-cache search hunspell-en-zz || apt-cache search hunspell-en
apt-cache search
dengan dua argumen
Ini tidak menghasilkan apa-apa, seperti apt-cache
argumen ANDs,
apt-cache search hunspell-en-zz hunspell-en
Dari dokumen apt-cache
Argumen terpisah dapat digunakan untuk menentukan beberapa pola pencarian yang and'ed bersama.
Jadi karena salah satu argumen itu jelas tidak ada, ini tidak menghasilkan apa-apa.
Pertanyaan
Apa idiom shell untuk menangani konvensi seperti yang ditemukan di apt-cache
mana kode kembali tidak berguna untuk tugas itu? Dan kesuksesan hanya ditentukan oleh kehadiran output pada STDOUT?
Mirip dengan
membuat menemukan gagal ketika tidak ada yang ditemukan
mereka berdua berasal dari masalah yang sama. Jawaban yang dipilih di sana menyebutkan
find -z
solusi mana yang sayangnya tidak dapat diterapkan di sini dan khusus untuk kasus penggunaan. Tidak ada penyebutan idiom atau membangun pipa tanpa menggunakan null-termination (bukan opsi aktifapt-cache
)
hunspell-ar
memang ada dan tidak ada paket nama negara. Saya perlu menemukan paket paling akurat untuk negara dan bahasa tertentu.
find
sama seperti apt-cache
dalam hal ini - kode pengembalian tidak berguna, kesuksesan didasarkan pada output.
-z
yang sayangnya bukan solusi di sini sehingga masalah penggunaan-spesifik kasus tidak berlaku. Dan tidak ada penyebutan idiom atau membangun saluran pipa tanpa menggunakan null-termination (bukan opsi pada apt-cache
)
find
untuk digunakan -print0
dan jadi mengerti -z
. Karena apt-cache tidak memberikan keluaran yang diakhiri null, Anda tidak perlu -z
.
hunspell-en
ada? Bagaimanapun, Anda dapat menggunakanapt-cache policy
dan menerima^$PACKAGENAME:
.