Вы можете использовать eval
для установки параметра. Описание этой команды можно найти здесь. Следующее использование eval
является неправильным:
wrong(){ eval $1=$2 }
Что касается дополнительной оценки eval
делает, вы должны использовать
assign(){ eval $1='$2' }
Проверьте результаты использования этих функций:
$ X1='$X2' $ X2='$X3' $ X3='xxx' $ $ echo :$X1: :$X2: $ echo :$X2: :$X3: $ echo :$X3: :xxx: $ $ wrong Y $X1 $ echo :$Y: :$X3: $ $ assign Y $X1 $ echo :$Y: :$X2: $ $ assign Y "hallo world" $echo :$Y: :hallo world: $ # the following may be unexpected $ assign Z $Y $ echo ":$Z:" :hallo: $ # so you have to quote the second argument if its a variable $ assign Z "$Y" $ echo ":$Z:" :hallo world:
Но вы можете достичь своей цели без использования eval
. Я предпочитаю этот способ, который более прост.
Следующая функция делает подстановку правильным способом (я надеюсь)
augment(){ local CURRENT=$1 local AUGMENT=$2 local NEW if [[ -z $CURRENT ]]; then NEW=$AUGMENT elif [[ ! ( ( $CURRENT = $AUGMENT ) || ( $CURRENT = $AUGMENT:* ) || \ ( $CURRENT = *:$AUGMENT ) || ( $CURRENT = *:$AUGMENT:* ) ) ]]; then NEW=$CURRENT:$AUGMENT else NEW=$CURRENT fi echo "$NEW" }
Проверьте следующий результат
augment /usr/bin /bin /usr/bin:/bin augment /usr/bin:/bin /bin /usr/bin:/bin augment /usr/bin:/bin:/usr/local/bin /bin /usr/bin:/bin:/usr/local/bin augment /bin:/usr/bin /bin /bin:/usr/bin augment /bin /bin /bin augment /usr/bin: /bin /usr/bin::/bin augment /usr/bin:/bin: /bin /usr/bin:/bin: augment /usr/bin:/bin:/usr/local/bin: /bin /usr/bin:/bin:/usr/local/bin: augment /bin:/usr/bin: /bin /bin:/usr/bin: augment /bin: /bin /bin: augment : /bin ::/bin augment "/usr lib" "/usr bin" /usr lib:/usr bin augment "/usr lib:/usr bin" "/usr bin" /usr lib:/usr bin
Теперь вы можете использовать функцию augment
следующим образом, чтобы установить переменную:
PATH=`augment PATH /bin` CLASSPATH=`augment CLASSPATH /bin` LD_LIBRARY_PATH=`augment LD_LIBRARY_PATH /usr/lib`
Поиск в Google по 0bda:0811
показывает, что WiFi-чип в ключе — это Realtek RTL8812au.
Судя по всему, вам может потребоваться собрать драйвер 8812au
из исходного кода.
Здесь, кажется, Centos7 -специальные инструкции по компиляции:
$ yum install -y git gcc kernel-devel
[snip]
$ git clone git@github.com:gnab/rtl8812au.git
Cloning into 'rtl8812au'...
[snip]
$ cd rtl8812au
$ make
[snip]
LD [M] /home/steve/wifi/rtl8812au/8812au.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/steve/wifi/rtl8812au/8812au.mod.o
LD [M] /home/steve/wifi/rtl8812au/8812au.ko
make[1]: Leaving directory `/usr/src/kernels/3.10.0-514.6.2.el7.x86_64'
Если это удалось, теперь вы можете попробовать загрузить модуль:
$ sudo insmod 8812au.ko
Очевидно, имя адаптера WiFi может использовать префикс en
вместо ожидаемого wl
. Если ваша система не дает сбоев и, например. Команда ip addr
(или виджет рабочего стола NetworkManager, если вы используете один из них ), указывает, что новый сетевой адаптер обнаружен после загрузки модуля, вы можете установить его на постоянной основе с помощью:
$ sudo cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
$ sudo depmod
Вам потребуется перекомпилировать этот драйвер каждый раз, когда вы устанавливаете новое обновление ядра.