bash脚本检索dbus输出

时间:2014-11-18 13:41:19

标签: bash shell dbus

今天,我必须检索dbus命令的结果。

dbus-send --session --print-reply --dest="com.ac.comp" /com/ac/comp/Time com.ac.comp.Time.GetTime

执行上述命令时,我获得以下输出:

method return sender=:1.0 -> dest=:1.34 reply_serial=2
   byte 0
   byte 0
   byte 0
   byte 0
   byte 0
   byte 0
   uint16 0

根据以下顺序给出值:

second
minute
hour
weekday
dateday
month
year

我已按照以下方式实施了我的bash:

dbus-send --session --print-reply --dest="com.ac.comp" /com/ac/comp/Time com.ac.comp.Time.GetTime | grep -E byte | cut -c 9-11 > "$file" 
dbus-send --session --print-reply --dest="com.ac.comp" /com/ac/comp/Time com.ac.comp.Time.GetTime | grep -E uint16 | cut -c 11-13 >> "$file" 

second=$(sed -n '1p' < $file)
minute=$(sed -n '2p' < $file)
hour=$(sed -n '3p' < $file)
weekday=$(sed -n '4p' < $file)
dateday=$(sed -n '5p' < $file)
month=$(sed -n '6p' < $file)
year=$(sed -n '7p' < $file) 
echo -e "Time ==> Day : $weekday - Date : $dateday/$month/$year - Time : $hour:$minute:$second"  

工作正确完成。但是,我确信我的脚本可以最大化,并且dbus不能被调用两次,并且有一种方法可以用更少的行来完成所有内容。

作为新的bash程序员,我需要就此问题提出建议并学习新方法。

1 个答案:

答案 0 :(得分:1)

array=($(dbus-send --session --print-reply --dest="com.ac.comp" /com/ac/comp/Time com.ac.comp.Time.GetTime))

也许在这里你所追求的是什么:

echo "Seconds = ${array[7]}"
echo "Minutes = ${array[9]}"
.
.