Bash에서 n번째 파이프 명령 인쇄

Bash에서 n번째 파이프 명령 인쇄

에서 배열 bashPIPESTATUS파이프라인의 명령 반환 값을 보유합니다.

파이프라인에서 cmd1 | cmd2 | cmd3두 번째 명령이 오류를 반환한다고 가정합니다. 검사는 PIPESTATUS실패한 명령의 색인을 제공하지만 명령 자체의 이름을 어떻게 인쇄합니까 cmd2?

매개변수도 표시 하는 것이 더 좋지만 cmd2명령 이름만 인쇄하는 답변을 수락하겠습니다.

답변1

# put commands in an array, e.g.: cat /etc/passwd | grep 1555 | grep sh
cmd=("cat /etc/passwd" "grep 1555" "grep sh")

# execute commands
eval "${cmd[0]}" | eval "${cmd[1]}" | eval "${cmd[2]}"

# save PIPESTATUS
save=("${PIPESTATUS[@]}")

# print returncode and failed command
for ((i=0;i<${#save[@]};i++)); do
  [[ ${save[$i]} -ne 0 ]] && echo "${save[$i]}: ${cmd[$i]}"
done

unset save cmd

출력(예:):

1: grep 1555
1: grep sh

관련 정보