簡體   English   中英

搜索p4命令的輸出

[英]Search output of p4 command

我試圖根據perforce命令的輸出執行操作。 但是似乎pipping和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 fileup-to-date會發送到stderr。 正如@heemayl建議的一種解決方法,即進行重定向。

您還可以通過對p4使用-s-e標志以與外殼程序無關的方式解決此問題:

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標志和grep用於其唯一代碼而不是字符串。

使用-F標志可讓您重新格式化輸出,以包含使用-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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM