2010-07-15 70 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 2010-08-05 11:33:44

回答

0

我不知道iPhone上的bash(或launchctl)。但通常您需要获取包含"PID" = ...的行,从中删除引号,分号,空格和制表符,并将结果传递给eval。你可以做,使用grepsed

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

感谢您的快速响应,这很好。 – Simmo 2010-07-15 09:17:01

0

无需使用eval。正常执行你的程序。

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

更新: 我没有iphone,所以我猜是有bash?

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

如果你的sed,

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

感谢您的快速响应,iPhone没有awk二进制文件,因此在这种情况下无法使用。 – Simmo 2010-07-15 09:18:23