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, 완전히 별개의 호출입니다. 서브 쉘을 명시 적으로 실행하고 싶다고 생각합니다.

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서브 쉘에서 해당 함수를 호출하는 것입니다 .

따라서 예를 들면 다음과 같습니다.

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.