Xuất khẩu hàm nên làm điều đó (chưa được kiểm tra):
export -f echo_var
seq -f "n%04g" 1 100 | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Bạn có thể sử dụng nội dung printf
thay vì bên ngoài seq
:
printf "n%04g\n" {1..100} | xargs -n 1 -P 10 -I {} bash -c 'echo_var "$@"' _ {}
Ngoài ra, sử dụng return 0
và exit 0
như thế che dấu bất kỳ giá trị lỗi nào có thể được tạo bởi lệnh trước nó. Ngoài ra, nếu không có lỗi, đó là mặc định và do đó hơi dư thừa.
@phobic đề cập rằng lệnh Bash có thể được đơn giản hóa thành
bash -c 'echo_var "{}"'
di chuyển {}
trực tiếp bên trong nó. Nhưng nó dễ bị tiêm lệnh như được chỉ ra bởi @Sasha.
Dưới đây là một ví dụ tại sao bạn không nên sử dụng định dạng nhúng:
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "{}"'
Sun Aug 18 11:56:45 CDT 2019
Một ví dụ khác về lý do tại sao không :
echo '\"; date\"' | xargs -I {} bash -c 'echo_var "{}"'
Đây là những gì đầu ra sử dụng định dạng an toàn :
$ echo '$(date)' | xargs -I {} bash -c 'echo_var "$@"' _ {}
$(date)
Điều này có thể so sánh với việc sử dụng SQL được tham số hóa truy vấn để tránh tiêm .
Tôi đang sử dụng date
thay thế lệnh hoặc trích dẫn thoát ở đây thay vì rm
lệnh được sử dụng trong nhận xét của Sasha vì nó không phá hủy.