как запустить команду ssh и разрешить удаленное расширение переменной

Я предполагаю, что вы хотите заменить ТОЛЬКО AllowOverride noneконкретно в блоке <Directory "/var/www/html">, а не где-либо еще. Мы можем это сделать.

Краткая версия:

sed -i '/^<Directory "\/var\/www\/html">/,/^<\/Directory>/ {
    s/AllowOverride none/AllowOverride all/;
}' httpd.conf

Это говорит о применении команды замены только между указанными строками.

Не забудьте сначала сделать резервную копию своего файла, а diffих после, чтобы подтвердить, что вы получили то, что хотели.:)

-1
12.02.2021, 17:30
1 ответ

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

ssh user@host printenv HOME

Это будет работать, пока в удаленной оболочке или системе есть утилита printenv.


Переменная HOMEрасширяется локально, поскольку она находится в строке с двойными -кавычками.

Вместо этого сделайте либо

ssh user@host 'bash -c "echo \"\$HOME\""'

или

ssh user@host 'bash -c '"'"'echo "$HOME"'"'"

В первом случае удаленная оболочка получает команду

bash -c "echo \"\$HOME\""

выполнить.

Во втором получается

bash -c 'echo "$HOME"'

Если ваша локальная оболочка — zshили bash, то вы можете использовать спецификатор формата %qдля printfдля построения правильно заключенной в кавычки строки для удаленной оболочки:

ssh user@host "$( printf '%q ' bash -c 'echo "$HOME"' )"

Это также работает для многострочных -команд:

ssh user@host "$( printf '%q ' bash -c '
echo "home: $HOME"
echo "away: $AWAY"' )"

См. также:

0
18.03.2021, 22:30

Теги

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