実際に存在する場合にのみプロセスを呼び出したい。はい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
明らかに、出力が最初に表示されたときに問題はありません。したがって、主な質問はなぜ「私はここにいるのですか?」です。これは直観にずれているようです。
2番目の質問は、この場合にコンテキストを処理できるように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)これが私に当てはまる場合は、他の人にも適用する必要があるため、これを行わないことにしました。