xargs: การใช้อาร์กิวเมนต์เดียวกันในหลายคำสั่ง


17

กำลังพยายามเขียนหนึ่งซับที่สามารถตรวจสอบเอาต์พุตdf -hและแจ้งเตือนเมื่อพาร์ติชันหนึ่งว่าง [หรือเกือบ] ของพื้นที่ ตอนนี้มันเป็นส่วนที่ใช้ xargs ที่เตะฉันในตูดตอนนี้ ...

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

ฉันจะทำให้ส่วนที่สอง {} แสดง "95" ได้อย่างไร

คำตอบ:


23

ที่&&ไม่ได้เป็นส่วนหนึ่งของxargsคำสั่งมันเป็นคำขอร้องแยกต่างหากอย่างสมบูรณ์ ฉันคิดว่าคุณจะต้องเรียกใช้ subshell อย่างชัดเจน:

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

หมายเหตุฉันใช้_percentแทน{}การหลีกเลี่ยงการปวดหัวพิเศษกับเชลล์ มันไม่ใช่ตัวแปรของเชลล์ ยังคงเป็นเพียงสตริงการแทนที่ xargs


3

อีกวิธีหนึ่งซึ่งสามารถอ่านได้มากขึ้นคือการกำหนดฟังก์ชั่นแยกต่างหากซึ่งมีคำสั่งอื่นทั้งหมดของคุณแล้วเรียกใช้ฟังก์ชันนั้นxargsใน sub-shell

ดังนั้นตัวอย่างเช่น:

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"'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.