如何在linux对话框输入框中维护命令结果的空白?

时间:2015-05-03 22:25:41

标签: bash bluetooth dialog

我有一个我一直在努力的bash脚本文件,我正试图能够列出当前可用的蓝牙设备,然后允许用户选择一个并连接到它。我已经完成了所有代码,但是蓝牙设备的列表将不会保留您直接从CLI运行命令时通常会获得的空白。

在一个理想的世界中,我希望能够实际列出蓝牙设备并让用户选择一个,但我遇到了太多麻烦,所以我选择了一个更简单的解决方案它们全部并要求用户键入他们想要连接的设备的mac地址。

我遇到问题的代码是:

echo "Scanning..."
bluetoothDeviceList=$(hcitool scan | sed -e 1d)
if [ "$bluetoothDeviceList" == "" ] ; then
    result="No devices were found. Ensure device is on and try again."
    display_result "Connect Bluetooth Device"
else
    bluetoothMacAddress=$(dialog --title "Connect Bluetooth Device" --backtitle "Pi Assist" --inputbox "$bluetoothDeviceList \n\nEnter the mac address of the device you would like to conect to:" 0 0 2>&1 1>&3);

    if [ $bluetoothMacAddress != "" ] ; then
        bluez-simple-agent hci0 $bluetoothMacAddress
        bluez-test-device trusted $bluetoothMacAddress yes
        bluez-test-input connect $bluetoothMacAddress
    fi
fi

在代码中我有一个display_result函数,我在下面展示过,只是为了确保你能够更全面地了解我正在做的事情。

display_result() 
{
    dialog --title "$1" \
    --no-collapse \
    --msgbox "$result" 0 0
}

2 个答案:

答案 0 :(得分:1)

你可能会发现这样的事情是一个有用的起点。您需要添加错误处理等

# Need a file to capture output of dialog command
result_file=$(mktemp)
trap "rm $result_file" EXIT
readarray devs < <(hcitool scan | tail -n +2 | awk '{print NR; print $0}')
dialog --menu "Select device" 20 80 15 "${devs[@]}" 2> $result_file
result=$(<$result_file)
answer={devs[$((result+1))]}

答案 1 :(得分:1)

dialog可以选择帮助解决此问题(请参阅manual):

  

- 列分隔符字符串

     

告诉对话框拆分收音机/复选框和菜单上的数据   出现给定字符串,并将拆分数据对齐到列中。

可以使用它,例如使用sed / awk将列之间的空间转换为列分隔符。这样做有助于告诉对话框 列的哪些部分,以及因使用多字节字符而导致格式化问题。