파이프를 시뮬레이트하고 싶습니다. 잠시 후에 트랩이 필요합니다.파이프를 시뮬레이션하는 방법은 무엇입니까?
#!/bin/bash
set -u
set -o pipefail
cat /dev/zero | cat | cat
그런 트랩은 어떻게 구현됩니까?
파이프를 시뮬레이트하고 싶습니다. 잠시 후에 트랩이 필요합니다.파이프를 시뮬레이션하는 방법은 무엇입니까?
#!/bin/bash
set -u
set -o pipefail
cat /dev/zero | cat | cat
그런 트랩은 어떻게 구현됩니까?
당신은 같은 것을 수행 할 수 있습니다
echo "a" | grep "b" | sed 's/a/c/g'
echo $?
set -o pipefail
echo "a" | grep "b" | sed 's/a/c/g'
echo $?
그것은 인쇄 : pipefail
이 설정된 후
0
1
는 전체 종료 코드 종료 코드 (실패)가 반환 사이
1
의
grep
입니다
정도 1
. 따라서 pipefail
은 파이프에서 명령의 마지막 0이 아닌 종료 코드를 반환하기 때문에 작동합니다.
파이프 파열을 시뮬레이트하려면 파이프 라인에있는 프로세스 중 하나가 0이 아닌 값으로 종료되어야합니다. 이는 일반적으로 어떤 종류의 실패를 의미합니다. More about pipelines. 예, 프로세스에 SIGKILL 또는 SIGINT 신호를 보내면 0보다 높은 종료 코드 인 at least on Linux it does so가 종료됩니다.
그런 트랩은 어떻게 구현됩니까?
당신이 trap
의 sigspec해야한다 무엇을 궁금해하는 것 같다. pipefail
을 사용하는 경우
는 파이프 라인의 반환 상태 0이 아닌 상태로 종료 마지막 (가장 오른쪽) 명령의 값, 또는 제로 성공적으로 모든 명령이 종료하면.
ERR
을 트랩하려고합니다.
예 :
set -u
set -o pipefail
trap 'echo pipefail' ERR
false | true
그것은 당신이 요구하는지 아주 분명하지 않다. 당신은 정교 할 수 있습니까? – devnull