Linux는 stderr이 존재하는 경우에만 상황에 맞게 stderr을 처리합니다.

Linux는 stderr이 존재하는 경우에만 상황에 맞게 stderr을 처리합니다.

실제로 존재하는 경우에만 프로세스를 호출하고 싶습니다.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

참고: 사용법에 관한 한, ifnea) 내 Linux에는 설치되지 않으며 b) 이것이 나에게 해당된다면 다른 모든 사람에게도 적용되어야 하기 때문에 이 작업을 수행하지 않기로 결정했습니다.

관련 정보