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-cachemengembalikan 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 curlatau 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-cacheargumen 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-cachemana 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 -zsolusi 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-armemang ada dan tidak ada paket nama negara. Saya perlu menemukan paket paling akurat untuk negara dan bahasa tertentu.
findsama seperti apt-cachedalam hal ini - kode pengembalian tidak berguna, kesuksesan didasarkan pada output.
-zyang 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)
finduntuk digunakan -print0dan jadi mengerti -z. Karena apt-cache tidak memberikan keluaran yang diakhiri null, Anda tidak perlu -z.
hunspell-enada? Bagaimanapun, Anda dapat menggunakanapt-cache policydan menerima^$PACKAGENAME:.