“gsutil cp”的结果总是在stderr中,而不是stdout

时间:2018-05-17 08:42:28

标签: google-cloud-platform google-cloud-storage google-cloud-functions gsutil

作为标题,“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中。

我该如何解决?

2 个答案:

答案 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。