xargs: sử dụng cùng một đối số trong nhiều lệnh


17

Đang cố gắng viết một lớp lót có thể thăm dò đầu ra df -hvà cảnh báo khi một trong các phân vùng nằm ngoài [hoặc gần như] không gian. Bây giờ là phần sử dụng xargs đá vào mông tôi ...

echo 95 | xargs -n1 -I{} [ {} -ge 95 ] && echo "No Space on disk {}% full -- remove old backups please"

Làm cách nào tôi có thể tạo {} hiển thị "95" thứ hai?

Câu trả lời:


23

Đó &&không phải là một phần của xargslệnh, nó là một lời gọi hoàn toàn riêng biệt. Tôi nghĩ rằng bạn sẽ muốn thực hiện một cách rõ ràng một subshell:

echo 95 | xargs -n1 -I_percent -- sh -c '[ _percent -ge 95 ] && echo "No Space on disk _percent% full -- remove old backups please"'

Cũng lưu ý rằng tôi đang sử dụng _percentthay vì {}để tránh trích dẫn thêm đau đầu với vỏ. Nó không phải là một biến vỏ; vẫn chỉ là một chuỗi thay thế xargs.


3

Một cách khác, dễ đọc hơn, là xác định một hàm riêng biệt chứa tất cả các lệnh khác của bạn và sau đó gọi hàm đó bằng xargsmột lớp vỏ phụ.

Do đó, ví dụ:

myfunc(){
  [ "$1" -ge 95 ] && echo "No Space on disk $1% full -- remove old backups please"
  echo "Another command echoing $1"
}

export -f myfunc

echo 95 | xargs -n1 -I_percent -- sh -c 'myfunc "_percent"'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.