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

注意:就使用而言,ifne我选择不这样做,因为a)它没有安装在我的linux上,b)如果这对我来说是正确的,那么对其他人来说也是如此。

相关内容