grep
因为“空”消息
no such file
和
up-to-date
转到stderr。正如@heemayl所建议的,解决这个问题的一种方法是重定向。
您还可以通过使用
-s
或
-e
标志到
p4
:
C:\Perforce\test>p4 -s sync
error: File(s) up-to-date.
exit: 0
C:\Perforce\test>p4 -e sync
error: File(s) up-to-date.
code0 554768772 (sub 388 sys 6 gen 17 args 1 sev 2 uniq 6532)
... code0 554768772
... fmt0 [%argc% - file(s)|File(s)] up-to-date.
... argc
exit: 0
这两个标志都将所有输出重定向到stdout,并在每条消息前添加有关消息本身的调试信息。例如,如果您尝试grep以获取特定消息,您可以使用
-e
flag和grep的唯一代码,而不是字符串。
使用
-F
标志使您可以重新格式化输出,以包括您看到的消息dict中的特定元素
-e
,因此,如果您只需要代码:
C:\Perforce\test>p4 -F %code0% sync
554768772
如果您试图捕获实际输出的元素,如文件名,
-F
更有用:
C:\Perforce\test>p4 -F %localPath% sync -n ...#1
c:\Perforce\test\0.f1
c:\Perforce\test\1.15
c:\Perforce\test\1.18
c:\Perforce\test\2.f1
c:\Perforce\test\2.f2