我只想在确实存在的情况下调用一个进程是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)如果这对我来说是正确的,那么对其他人来说也是如此。