2017-12-04 21 views
0

PERFORCE 명령의 출력에 따라 조치를 수행하려고합니다. 그러나 그 명령을 pipping하고 greping/acking하는 것이 픽업 출력에 나타나지 않는 것 같습니다.p4 명령의 출력 검색

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 

다음 출력을 읽기 파일에 기록하지 않고 억지로 명령의 출력을 읽을 어쨌든이 있나요? 이상적인 명령은 단일 행입니다. 및 up-to-date과 같은 "비어있는"메시지가 stderr로 이동하기 때문에

+1

확인 STDERR : 파일 이름과 같은 실제 출력,의, -F 더욱 유용 grep -c up' – heemayl

+0

출력에 "모호한 출력 리디렉션"을 제공합니다. – difurious

+0

비슷한 출력 : p4 sync -n $ HOME/...> & | grep -c up "모호한 출력 리디렉션.". 기록을 점검 할 때> 및 & 사이에 임의의 공간을 추가하는 것으로 보입니다. "p4 sync -n $ HOME/...> & | grep -c up" – difurious

답변

3

grep이 작동하지 않습니다. @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 

이러한 플래그 모두에 대한 디버깅 정보를 앞에 추가 모든 표준 출력으로 출력과 모든 메시지를 리디렉션 메시지 자체 예를 들어, 특정 메시지에 대해 grep을 수행하려는 경우 -e 플래그와 grep을 문자열이 아닌 고유 한 코드로 사용할 수 있습니다.

C:\Perforce\test>p4 -F %code0% sync 
554768772 

당신이 요소를 캡처하려는 경우 : -F 플래그를 사용

당신이 -e으로 볼 수있는 메시지 DICT에서 특정 요소를 포함하는 출력을 포맷, 그래서 당신은 단지 코드를 원하는 경우 수 있습니다 `$ 홈 -n P4 동기/... 2> & 1 | : 너무

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