今天,我必须检索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程序员,我需要就此问题提出建议并学习新方法。
答案 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]}"
.
.