p4 命令的搜索输出
Search output of p4 command
我正在尝试根据 perforce 命令的输出执行操作。但似乎 piping 和 greping/acking 命令似乎没有获取输出
例如
p4 sync -n $HOME/... | grep -c up
/homedirectory/... - file(s) up-to-date.
0
p4 sync -n $HOME/... | grep -c nope
/homedirectory/... - file(s) up-to-date.
0
我正在尝试做的进一步示例:
if ( `p4 sync -n $HOME/... | grep -c "no such file"` == 0 ) then
if command
else
do else command
endif
有没有办法读取 perforce 命令的输出而不必写入文件然后读取输出?理想情况下,该命令将是一行。
grep
不起作用,因为像 no such file
和 up-to-date
这样的 "empty" 消息会转到标准错误。正如@heemayl 建议的一种解决方法是进行重定向。
您还可以通过使用 -s
或 -e
标志以 shell 独立的方式解决此问题 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
这两个标志都将所有输出重定向到标准输出,并且还在每条消息前面加上关于消息本身的调试信息。例如,如果您尝试对特定消息进行 grep,则可以使用 -e
标志并对其唯一代码而不是字符串进行 grep。
使用 -F
标志可以让您重新格式化输出以包含您在 -e
中看到的消息字典中的特定元素,因此如果您只需要代码:
C:\Perforce\test>p4 -F %code0% sync
554768772
如果您尝试捕获实际输出的元素,例如文件名,-F
会更有用:
C:\Perforce\test>p4 -F %localPath% sync -n ...#1
c:\Perforce\test[=12=].f1
c:\Perforce\test.15
c:\Perforce\test.18
c:\Perforce\test.f1
c:\Perforce\test.f2
我正在尝试根据 perforce 命令的输出执行操作。但似乎 piping 和 greping/acking 命令似乎没有获取输出
例如
p4 sync -n $HOME/... | grep -c up
/homedirectory/... - file(s) up-to-date.
0
p4 sync -n $HOME/... | grep -c nope
/homedirectory/... - file(s) up-to-date.
0
我正在尝试做的进一步示例:
if ( `p4 sync -n $HOME/... | grep -c "no such file"` == 0 ) then
if command
else
do else command
endif
有没有办法读取 perforce 命令的输出而不必写入文件然后读取输出?理想情况下,该命令将是一行。
grep
不起作用,因为像 no such file
和 up-to-date
这样的 "empty" 消息会转到标准错误。正如@heemayl 建议的一种解决方法是进行重定向。
您还可以通过使用 -s
或 -e
标志以 shell 独立的方式解决此问题 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
这两个标志都将所有输出重定向到标准输出,并且还在每条消息前面加上关于消息本身的调试信息。例如,如果您尝试对特定消息进行 grep,则可以使用 -e
标志并对其唯一代码而不是字符串进行 grep。
使用 -F
标志可以让您重新格式化输出以包含您在 -e
中看到的消息字典中的特定元素,因此如果您只需要代码:
C:\Perforce\test>p4 -F %code0% sync
554768772
如果您尝试捕获实际输出的元素,例如文件名,-F
会更有用:
C:\Perforce\test>p4 -F %localPath% sync -n ...#1
c:\Perforce\test[=12=].f1
c:\Perforce\test.15
c:\Perforce\test.18
c:\Perforce\test.f1
c:\Perforce\test.f2