我尝试使用Azure CLI对Azure现有环境进行一些更改。对于成功的请求,我能够使用"——query"提取所需的详细信息,但对于失败的请求,我无法捕获输出到变量。
如:az group show -n "rgname"
输出:(ResourceGroupNotFound)资源组'rgname'无法找到
如何将错误输出捕获到变量.
PowerShell将消息写入不同的流,您可以将其重定向到标准输出流:
$output = (az group show -n "rgname" 2>&1)
现在$output
将包含- error消息和常规输出。
或者,您可以将错误消息重定向到一个文件:
az group show -n "rgname" 2>error.log
参见:https://stackoverflow.com/a/17421207/1163423
程序执行时,按顺序打开三个文件句柄:stdin,stdout和stderr. 这些文件句柄有数字:0、1和2。这将有助于解释2>&1的作用(将stderr重定向到stdin)。
大多数程序,但不是全部,都将错误消息写入stderr。
捕获stderr到变量:
error=$(myprogram 2>&1 > /dev/null)
这个例子首先重定向stdout到/dev/null,重定向stderr到stdout. 然后在变量error中捕获该输出.
如果您还想捕获正常的stdout消息:
error=$({myprogram > tmpfile;} 2>&1)
messages=$(<tmpfile)
rm tmpfile