실제로 존재하는 경우에만 프로세스를 호출하고 싶습니다.예STDERR이 존재하지만 실제로 존재하는지 평가하는 방법을 모르겠습니다. 이 코드는:
errtest() {
kubectl get namespace -A
kubectl get namespace -A 2> >(echo "why am I here")
}
> errtest
산출:
NAME STATUS AGE
2c74fd3b89e64077afd34d8ab8af4f09 Active 10d
845d1f1c71ed42c8b9e4c780992a95c0 Active 367d
why am I here
NAME STATUS AGE
2c74fd3b89e64077afd34d8ab8af4f09 Active 10d
845d1f1c71ed42c8b9e4c780992a95c0 Active 367d
분명히 출력이 처음 표시될 때 아무런 문제가 없습니다. 따라서 주요 질문은 왜 "내가 여기에 있습니까?"입니다. 이것은 직관에 어긋나는 것 같습니다.
두 번째 질문은 이 경우 컨텍스트를 처리할 수 있도록 STDERR을 어떻게 식별합니까?입니다. 그것은 다음과 같습니다:
kubectl get namespace -A 2> >(if [[ -z STDERR ]]; then echo "there is an error"; fi)
답변1
따라서 이 문제를 해결하는 데 필요한 이해가 다음으로 전달됩니다.
>(echo "why am I here")
..구체적으로는자원한 줄씩 읽을 수 있습니다. AFAIK 리소스는 (쉽게) 더 이상 전달될 수 있는 것이 아닙니다. 또는 변수 참조로 사용됩니다. 이것이 내 해결책입니다.
errtest() {
random_variable="hello this works"
# yes you can pass parameters as well..
kubectl get namespace -A 2> >(errtest_if $random_variable)
}
errtest_if() {
while read line; do
echo "parameter 1 is $1"
echo $line #<< first line of the error
#evaluate it if desired
echo "looks like you are not logged in"
#maybe call something else if desired
#break if you only need to know there _is_ an error
break
done
}
> errtest
참고: 사용법에 관한 한, ifne
a) 내 Linux에는 설치되지 않으며 b) 이것이 나에게 해당된다면 다른 모든 사람에게도 적용되어야 하기 때문에 이 작업을 수행하지 않기로 결정했습니다.