2010-07-15 3 views
1

BASH를 사용하여 변수 (해시 데이터 포함)에서 PID 값을 가져와야합니다. eval 오류는 내부의 배열 때문에 발생합니다. 이 스크립트는 iPhone에 있습니다.bash를 사용하여 해시 값 가져 오기

eval "$(launchctl list com.3radicateRD)" 

eval: line 10: syntax error near unexpected token `(' 
eval: line 10: ` "ProgramArguments" = (' 
------------------------------------------------------ 
{ 
     "Label" = "com.3radicateRD"; 
     "LimitLoadToSessionType" = "System"; 
     "OnDemand" = false; 
     "LastExitStatus" = 0; 
     "PID" = 6810; 
     "TimeOut" = 30; 
     "ProgramArguments" = (
       "bash"; 
       "/var/mobile/Library/3radicateRD/3radicateRD"; 
     ); 
}; 
+0

는'eval'은 bash는 코드이었다 것처럼 당신이 그것을 줄의 코드를 실행하는 bash는 내장입니다. 'launchctl' 명령의 출력을 제공하고 있습니다. 그것은 bash 코드가 아닙니다. 거기에'eval'을 넣는 것은 전혀 의미가 없습니다. – lhunath

답변

0

저는 IPhone (또는 해당 문제에 대해서는 launchctl)에 bash를 알지 못합니다. 하지만 일반적으로 "PID" = ...을 포함하는 줄을 가져 와서 따옴표, 세미콜론, 공백 및 탭을 제거한 다음 해당 결과를 eval으로 전달해야합니다. 당신은 grepsed를 사용하는 것을 할 수 없다 :

eval $(launchctl list com.3radicateRD | grep '"PID"' | sed 's/["; \t]//g') 
+0

빠른 응답을 보내 주셔서 감사합니다. – Simmo

0

평가를 사용 할 필요가 있습니다. 프로그램을 정상적으로 실행하십시오.

launchctl list com.3radicateRD | awk '/PID/{print $3}' 

업데이트 : 내가 아이폰을 가지고 있지 않기 때문에 나는 떠들썩한 파티가 생각입니까?

launchctl list com.3radicateRD | while read line 
do 
    case "$line" in 
    *PID*) 
    set -- $line 
    echo $3 
    esac 
done 

그리고 당신은 나오지 않은 경우,

launchctl list com.3radicateRD | sed '/PID/s/.*= //;s/;//' 
+0

빠른 응답을 보내 주셔서 감사합니다. iPhone에는 awk 바이너리가 없으므로이 경우 작동하지 않습니다. – Simmo

관련 문제