найдите, что утилита не распознает нотацию скобки

Я иногда использую следующий сценарий для добавления bluetooth-клавиатур к моим системам, он добавляет его на системном уровне, а не уровне пользователя, который, кажется, заставляет вещи работать правильно от начальной загрузки, и моя клавиатура (клавиатуры) применимы от приглашения ко входу в систему.

Как записано, Вы должны будете колотить (v4.0 +, надо надеяться) и пакет блюза, который предоставляет bluez-simple-agent, bluez-test-device, bluez-test-input программы.

Большая часть кода ниже должна реализовать список, чтобы позволить Вам выбирать, какое устройство, он действительно просто сводит к последним 6 (некомментарий) строки, если Вы знаете свой MAC-адрес BT, можно заменить весь материал выбора статическим присвоением.

#!/bin/bash
#
# L Nix <lornix@lornix.com>
# setup-bt-kb : allow choosing & pairing a bluetooth keyboard from the console
#
declare -a addrlist
#
while [ 1 ]; do
    echo -n "Scanning for Bluetooth devices ... "
    readarray -n 10 -O 0 -t addrlist < <(hcitool scan|grep -v "^Scanning"|sed -e "s/^[ \t]//g" -e "s/\t/ /g" | head -n 9)
    echo
    echo
    length=${#addrlist[@]}
    a=1
    while [ ${a} -le ${length} ]; do
        echo "$a) ${addrlist[$a-1]}"
        a=$((a + 1))
    done
    echo
    while [ 1 ]; do
        if [ ${length} -gt 0 ]; then
            echo -n "Choose (1-${length}), or "
        fi
        echo -n "'R' to rescan: "
        read -n 1 REPLY
        echo
        case ${REPLY} in
            Q)
                # just quit
                exit 0
                ;;
            [0rR])
                echo
                REPLY=0
                break
                ;;
            [123456789])
                if [ ${REPLY} -le ${length} ]; then
                    echo "Got ${REPLY}"
                    break
                fi
                ;;
            *)
                ;;
        esac
    done
    if [ ${REPLY} -gt 0 ]; then
        break
    fi
done
#
device=${addrlist[${REPLY}-1]}
#
BTADDR=${device/% *}
BTNAME=${device/#??:??:??:??:??:?? }
#
echo "selecting '${BTNAME}' at ${BTADDR}"
#
echo "Pairing with ${BTNAME} (Generally '0000')"
bluez-simple-agent hci0 ${BTADDR}
#
echo "Setting trust level with ${BTNAME}"
bluez-test-device trusted ${BTADDR} yes
#
echo "Connecting to ${BTNAME}"
bluez-test-input connect ${BTADDR}
#
echo "Completed"
3
28.05.2013, 00:21
1 ответ

Кажется, что проблема \( интерпретируется оболочкой сначала.

Например, Вы получили файл в названном текущем каталоге:

нечто (.test

Затем

ls foo\(.text

и

ls "foo(.text"

обе работы.

Так, следующие работы:

find . -regex ".*submit\(Web\)?\.m"

Править:

Одинарная кавычка также работает здесь.

Различие между одинарной кавычкой и двойной кавычкой, см. это сообщение: одинарная кавычка по сравнению с двойной кавычкой в ударе

5
27.01.2020, 21:17
  • 1
    Или помещенный regex в одинарные кавычки вместо этого: find . -regex '.*submit\(Web\)?\.m' –  slm♦ 26.05.2013, 04:44
  • 2
    @slm Да, так или иначе, просто препятствует тому, чтобы оболочка интерпретировала \(. Отредактированный. –  gongzhitaao 26.05.2013, 07:08
  • 3
    хорошее эмпирическое правило, должен заключить все в кавычки в одинарных кавычках, если Вам конкретно не нужно поведение замены двойных кавычек. –  tripleee 26.05.2013, 14:28

Теги

Похожие вопросы