Ingin memperbaiki pertanyaan ini? Perbarui pertanyaan sehingga dapat dijawab dengan fakta dan kutipan dengan mengedit posting ini.
Ditutup 7 tahun yang lalu.
Perbaiki pertanyaan ini
Misalkan Anda memiliki masalah berikut:
Bergantung pada apakah skrip dijalankan dalam pipa atau tidak, Anda ingin menambahkan -print0
parameter untuk find
.
Saya dapat memikirkan setidaknya dua cara untuk melakukan ini:
[[ -p '/dev/stdin' ]] && local null_terminated='-print0'
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "$null_terminated"
Atau
if [[ -p '/dev/stdin' ]]; then
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) -print0
else
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" )
fi
Apakah ada cara yang lebih baik untuk melakukan ini? Pertanyaannya adalah untuk bash
, tetapi solusi untuk shell lain atau sh
portabel/standar solusi akan diterima juga.
Jawaban yang Diterima:
Yang pertama tidak akan berfungsi seolah-olah $null_terminated
kosong atau tidak disetel, find
akan mengeluh tentang argumen ekstra kosong itu.
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) $null_terminated
Akan bekerja tetapi hanya jika $null_terminated
tidak mengandung karakter pengganti atau karakter dari IFS.
Melakukannya:
if [[ -p '/dev/stdin' ]]; then
extra_args=(-print0)
else
extra_args=()
fi
find -mindepth 1 -maxdepth 1 ! ( "${args[@]}" ) "${extra_args[@]}"
tidak akan bermasalah.
Bourne/POSIXly, Anda dapat melakukan:
setel -- temukan . ! -nama . -pangkas! ( "[email protected]" )[ -p /dev/stdin ] &&set -- "[email protected]" -exec printf '%s
Linux – Bagaimana Menghubungkan Perangkat /dev/sd Dengan Perangkat Keras yang Diwakili?
Bagaimana Cara Mengarahkan Hanya Stderr?
Linux