Mengekspor fungsi harus melakukannya (belum diuji):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Anda dapat menggunakan builtin printf
alih-alih eksternal seq
:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Juga, menggunakan return 0
dan exit 0
menyukai itu menutupi nilai kesalahan apa pun yang mungkin dihasilkan oleh perintah sebelumnya. Juga, jika tidak ada kesalahan, itu adalah default dan karenanya agak berlebihan.
@ phobic menyebutkan bahwa perintah Bash dapat disederhanakan
bash -c 'echo_var "{}"'
memindahkan {}
langsung di dalamnya. Tapi itu rentan terhadap injeksi perintah seperti yang ditunjukkan oleh @Sasha.
Berikut adalah contoh mengapa Anda tidak boleh menggunakan format yang disematkan:
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
Contoh lain mengapa tidak :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
Ini adalah keluaran yang menggunakan format aman :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
Ini sebanding dengan menggunakan query SQL parameter untuk menghindari injeksi .
Saya menggunakan date
substitusi perintah atau dalam tanda kutip di sini alih-alih rm
perintah yang digunakan dalam komentar Sasha karena itu tidak merusak.