作为标题,“gsutil cp”的结果不会重定向到stdout,它总是重定向到stderr。
例如:gsutil cp existed_file.txt . > >(tee -a out.log) 2> >(tee -a error.log >&2)
。
在上面的命令中,out.log为空,error.log具有成功的复制结果。
它的行为是错误的,因为如果上面的命令是正确的,它的输出应该在out.log中返回,而不是在error.log中。
我该如何解决?
答案 0 :(得分:3)
gsutil通过设计将进度/状态信息输出到stderr,以保持进度/状态与输出到stdout的数据分开。例如,如果您运行:
gsutil ls gs://my-bucket > listing 2>&1 log
您将在“list”文件中看到存储桶列表,并在“log”文件中看到任何错误或其他状态信息。
虽然gsutil cp输出不生成数据(仅状态),但我们对所有命令使用上面的stderr / stdout除法,因此gsutil在这方面对所有命令都表现一致。
答案 1 :(得分:1)
如果您想知道gsutil是否失败,可以使用特殊参数$?。从文档中:
($?)扩展为最近执行的退出状态 前景管道。
gsutil cp existed_file.txt .
echo $? # Will display 0 if OK and something else if not OK
注意:使用powershell时,它将显示True或False。