удар добавляет дополнительные одинарные кавычки

У меня просто была та же проблема на хинду с 3.5.0 ядрами. То, какой пример онлайн я не попробовал вывода, добралось до клиента, пока я не выполнил следующую команду:

 dmesg -n 7

Я первоначально попробовал

dmesg -n 8

который был предложен в документации ядра, но это возвратилось

localhost ~ # dmesg -n 8
dmesg: unknown level '8'

где dmesg-n 7 работал

localhost ~ # dmesg -n 7
localhost ~ # echo check > /sys/block/md0/md/sync_action

Вот то, что я вошел в клиент

datastore1 ~ # nc -l -p 30000 -u
[ 9698.913098] md: data-check of RAID array md0
[ 9698.913112] md: minimum _guaranteed_  speed: 1000 KB/sec/disk.
[ 9698.913124] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for data-check.
[ 9698.913150] md: using 128k window, over a total of 1048512k.
[ 9718.197555] md: md0: data-check done.

BTW, Вот то, как я устанавливаю netconsole:

modprobe netconsole netconsole="@/eth0,30000@192.168.1.31/"
12
21.01.2014, 01:45
3 ответа

Bash отображает одинарные кавычки, чтобы показать команду, которая является допустимым входным синтаксисом. Это не выполняет команду, которая содержит эти одинарные кавычки в параметре к ssh команда.

ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'

говорит Вам, что последние 4 параметра команды ssh "sudo, /home/pi/shared/blink.sh, 27 и off".

На удаленном хосте ssh демон присоединяется к словам команд с пробелами как разделители, таким образом, удаленная команда, которую Вы выполняете,

"sudo /home/pi/shared/blink.sh 27 off"

Это пытается выполнить команду, имя которой sudo /home/pi/shared/blink.sh 27 off, который, конечно, не существует.

Удалите двойные кавычки из своего определения testvar.

Это не имеет значения здесь, но это, вероятно, имеет значение в Вашем реальном случае: вместо ${testvar}, записать "$testvar" (или "${testvar}" если Вы хотите, но фигурные скобки являются дополнительными). Всегда помещайте двойные кавычки вокруг подстановок переменных, если Вы не знаете, почему необходимо пропустить их. "$testvar" расширяется до значения переменной testvar, тогда как $testvar если не в двойных кавычках рассматривает значение testvar как разделенный от пробела список шаблонов шарика.

7
27.01.2020, 19:56

Я думаю, что необходимо использовать:

testvar="sudo /home/pi/shared/blink.sh 27 off"
ssh -n -q -q -o BatchMode=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 $1 "${testvar}"

Это работает на меня:

$ bash -x -c 'testvar="la la la"; echo "${testvar}"'
+ testvar='la la la'
+ echo 'la la la'
la la la

Но если я пишу, что то же как Вы сделало, я получаю тот же неправильный результат:

$ bash -x -c 'testvar="\"la la la\""; echo ${testvar}'
+ testvar='"la la la"'
+ echo '"la' la 'la"'
"la la la"
3
27.01.2020, 19:56
  • 1
    Кавычки крайне важны, потому что они - механизм оболочки для собирания в группу нескольких слов для формирования отдельного аргумента. –  glenn jackman 21.01.2014, 03:10

Shell разделяет значение переменной в слова. Doublequote это для предотвращения разделения. Посмотрите различие:

t='"a b c"'
set -xv
echo $t
echo "$t"
2
27.01.2020, 19:56

Теги

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