적절한 이스케이프는 별칭을 생성합니다.

적절한 이스케이프는 별칭을 생성합니다.
alias wp='watch -d --interval 1 "oc get pods | grep 0/1 | grep -v Completed | awk {'print \$1,\$2,\$3,\$4'} | column -t "'

이 명령을 피하려고 합니다. \를 사용하여 인쇄 따옴표를 이스케이프 처리하려고 시도했지만 성공하지 못했습니다. 어떤 아이디어가 있나요?

감사해요.

답변1

이것은 참으로 어려운 질문입니다. 문제는 '내부에 종료 별칭을 정의할 수 없다는 것입니다. 그래서 "명령이 필요합니다 awk. 다음으로, flag 를 "소비"할 수 있는 모든 항목에 대해 1단계 이스케이프가 필요합니다 $. 여기에서 "awk에 대해 한 번, "사용자가 제공한 명령에 대해 한 번 watch, 쉘 자체에 대해 세 번째를 이스케이프 해야 합니다 . 이것은 작동합니다:

alias wp='watch -d --interval 1 "oc get pods | grep 0/1 | grep -v Completed | awk \"{print \\\$1,\\\$2,\\\$3,\\\$4}\" | column -t"'

내가 당신이라면 별칭 대신 함수를 사용하여 구문을 약간 단순화할 것입니다.

wp(){
    command1='oc get pods | grep 0/1 | grep -v Completed'
    command2='awk "{print \$1,\$2,\$3,\$4}" | column -t'

    watch -d --interval 1 "$command1 | $command2"
}

grep마지막으로 이미 다음을 사용하고 있는 경우 다음 사항에 유의하세요 awk.

 wp(){
  command="oc get pods | awk '/0\/1/ && !/Completed/{print \$1,\$2,\$3,\$4}' | column -t"
  watch -d --interval 1 "$command"
}

관련 정보