이것은 후면에 잘 알려진 통증입니다. bash (그리고 다른 많은 현대의 sh 변종들)을 사용한다면, PIPESTATUS 배열에 접근하여 파이프의 앞부분에있는 프로그램의 반환 값을 얻을 수 있습니다. 일반적으로 파이프의 반환 값은 파이프에서 마지막 프로그램의 반환 값입니다. PIPESTATUS가없는 쉘을 사용하는 경우 (또는 이식성을 원할 경우)
과 같은 작업을 수행 할 수 있습니다
#!/bin/sh
# run 'echo foo | false | sed s/f/t/', recording the status
# of false in RV
eval $({ { echo foo | false; printf RV=$? >&4; } |
sed s/f/t/ >&3; } 4>&1;) 3>&1
echo RV=$RV
# run 'echo foo | cat | sed s/f/t/', recording the status
# of cat in RV
eval $({ { echo foo | cat; printf RV=$? >&4; } |
sed s/f/t/ >&3; } 4>&1;) 3>&1
echo RV=$RV
각각의 경우 RV는 각각 false와 cat의 반환 값을 포함합니다.
하지만 전체 출력이 생성되고 스트림 된 "sed"형식이 아닌 경우에만 정규 표현식을 수행 할 것입니다. 맞습니까? 내 PERL 지식은 꽤 비난입니다 ... – Bastl
전체적으로 가능하면 잠시 () 루프를 읽을 수 있습니다. 줄을 읽는 동안 줄을 읽는 동안 줄을 바꾸면됩니다. 그것이 합리적으로 들리면, 나는 당신이 무언가를 쓸 수 있도록 도울 수있다. (그것이 5 라이너보다 적을 것을 기대한다!) –