Синтаксическая ошибка с переменной, содержащей кавычки

а как насчет

/dev/mapper/MYVGNAME--vg-images /images  ext4    defaults 0       1

в fstab ?

(я полагаю, вы отформатировали его ext4 )

2
18.05.2016, 03:38
1 ответ

Когда вы пишете $ PGWA без кавычек, это разделяет значение PGWA на пробелы¹. Цитаты не имеют здесь особого значения, поэтому в итоге вы получите слова -o , ProxyCommand = "ssh , gateway1 , nc , % h и % p ".

См. Почему мой сценарий оболочки подавляется пробелами или другими специальными символами? для получения дополнительных объяснений.

Расширение переменной вне двойных кавычек почти всегда является ошибкой. Это всегда ошибка, если вы не знаете, почему нужно убирать двойные кавычки.

Что вам нужно сделать, так это передать два аргумента команде SSH: -o и ProxyCommand = ssh gateway2 nc --proxy% h% p --proxy-type socks4 .

В zsh вы можете просто установить PGWA как массив:

PGWA=(-o 'ProxyCommand=ssh gateway2 nc --proxy %h %p --proxy-type socks4')
ssh $PGWA …

В других оболочках, таких как bash и ksh, это требует большего количества наборов символов из-за их конструктивной ошибки, заключающейся в том, что расширения переменных без кавычек подвергаются разбиению и из-за их явного синтаксиса для массивов:

PGWA=(-o 'ProxyCommand=ssh gateway2 nc --proxy %h %p --proxy-type socks4')
ssh "${PGWA[@]}" …

Метод, который работал бы в любой sh-подобной оболочке и не требовал бы большого количества наборов текста, - это определение функций.

pgwa () {
  typeset c="$1"; shift
  "$c" -o 'ProxyCommand=ssh gateway2 nc --proxy %h %p --proxy-type socks4' "$@"
}
pgwa ssh …

Но я думаю, что лучшим решением было бы поместить все эти определения в ваш .ssh / config , где они и должны быть. Таким образом, вам не понадобятся какие-либо уловки с оболочкой, и конфигурации будут работать в других программах (rsync, sshfs, программах передачи файлов с графическим интерфейсом и т. Д.). Если вы добавляете новую виртуальную машину за gateway1, либо добавьте запись в .ssh / config или используйте ssh -o HostName = new-vm something-behind-gateway1…

¹ Плюс другие вещи, которые здесь не имеют значения.

5
27.01.2020, 21:56

Теги

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