Я предполагаю, что вы хотите заменить ТОЛЬКО AllowOverride none
конкретно в блоке <Directory "/var/www/html">
, а не где-либо еще. Мы можем это сделать.
Краткая версия:
sed -i '/^<Directory "\/var\/www\/html">/,/^<\/Directory>/ {
s/AllowOverride none/AllowOverride all/;
}' httpd.conf
Это говорит о применении команды замены только между указанными строками.
Не забудьте сначала сделать резервную копию своего файла, а diff
их после, чтобы подтвердить, что вы получили то, что хотели.:)
Если цель состоит в том, чтобы просто получить удаленное значение 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"' )"
См. также: