В соответствии с руководством Bash(и POSIX тоже):
Когда используется форма подстановки с обратной кавычкой в старом стиле, обратная косая черта сохраняет свое буквальное значение, за исключением случаев, когда за ней следует
$
,`
или\
.
Это означает, что `echo "$PROXY_URL" | sed -e 's/[\/&]/\\&/g'`
приводит к тому, что команда sed
выполняется как sed -e 's/[\/&] /\&/g'
, потому что двойная обратная косая черта была преобразована в одну. \&
затем делает литерал &
в sed.
Вместо этого вы можете использовать подстановку команд в стиле $(...)
, чтобы избежать этого:
proxyUrlSedEscaped=$(echo "$PROXY_URL" | sed -e 's/[\/&]/\\&/g')
Подстановка в новом стиле допускает любую команду с ее обычной интерпретацией.
Если вы должны использовать `
, то довольно гротескный двойной экран тоже работает:
proxyUrlSedEscaped=`echo "$PROXY_URL" | sed -e 's/[\/&]/\\\\&/g'`
Это превращает \\\\
в \\
, который затем превращается для вас в \
.
Ответ, который я разместил здесь, может помочь: Настройка сервера vnc без физического дисплея: Ubuntu 16.04 LTS
Он устанавливает виртуальный экран для стека X для отправки вывода, позволяя ему завершить запуск среды графического интерфейса.