Por alguna razón, ha decidido acceder a su servidor FTP a través de un proxy HTTP, un protocolo que el doco LFTP llama HFTP . Ha codificado esta decisión en el archivo de configuración de LFTP o en una variable de entorno ftp_proxy
.
Se supone que su proxy decodifica las partes ;type=i
y ;type=a
de las URL que LFTP le envía, según RFC 1738 § 3.2.2. No está haciendo eso y los está pasando incorrectamente al servidor FTP de destino. Hay un cambio de archivo de configuración, documentado en el manual del usuario de LFTP, para evitar eso, omitiendo el sufijo de tipo FTP de las URL enviadas al proxy.
En el modo HFTP, el comando mv
en el cliente LFTP se convierte en un comando MOVE
con un encabezado Destination:
para el proxy HTTP (que, a su vez, se espera que se traduzca a FTP RNFR
y RNTO
verbos enviados al servidor FTP de destino apropiadamente ). Su proxy HTTP no implementa un verbo HTTP MOVE
en absoluto.
Parece que su proxy HTTP es bastante malo en FTP sobre HTTP.
Sus opciones son:
Если вы хотите заменить эту строку тем, что у вас есть в переменной:
sed "s|185\.228\.168\.168,185\.228\.169\.168|$NEW_DNS|" /etc/wireguard/wg0.conf
Вам нужно sed s|string|replacement|
. Вы можете использовать sed s|string|replacement|g
для замены во всем файле.Вам также нужно экранировать .
обратной косой чертой, чтобы она не представляла один символ. Я удалил переключатель -i
, чтобы изменения записывались в стандартный вывод, чтобы вы могли убедиться, что это то, что вам нужно. Вы можете вернуть его в команду, как только подтвердите, что это так.
Если вы хотите отредактировать сам файл, добавьте в команду переключатель -i
.
sed -i "s|185\.228\.168\.168,185\.228\.169\.168|$NEW_DNS|" /etc/wireguard/wg0.conf
Команда s
в sed
выполняет замену всего, что соответствует заданному регулярному выражению, на заданный текст замены. Его синтаксис s/expression/text/flags
.
В вашем случае вы хотите использовать выражение
185\.228\.168\.168,185\.228\.169\.168
Я экранировал точки, так как они являются "особыми" в регулярных выражениях (неэкранированная точка соответствует любому одиночному символу, но вы хотите, чтобы соответствовали фактические точки ).
Текст, который вы хотите использовать в качестве замещающего текста, находится в переменной. Это означает, что все выражение sed
должно быть строкой в двойных -кавычках (, поскольку оболочка будет игнорировать переменную в одинарной строке -в кавычках ).
Кроме того, вам не нужны дополнительные флаги с командой s
, поэтому мы получаем
sed "s/185\.228\.168\.168,185\.228\.169\.168/$NEW_DNS/" filename
Не используйте sed -i
для редактирования места -, пока сами не убедитесь, что получен правильный результат.
Также обратите внимание, что, поскольку мы вводим значение вашей переменной в скрипт sed
, это приведет к ошибке, если $NEW_DNS
содержит какие-либо /
символы (, что, как я полагаю, маловероятно, что в этом случае частный случай ).
Если вы под запятой имеете в виду "либо тот, либо тот адрес", то вам придется использовать чередование (с|
):
sed -E "s/185\.228\.168\.168|185\.228\.169\.168/$NEW_DNS/" filename
Здесь я использую sed -E
, так как нам нужно включить расширенные регулярные выражения (|
не является частью базового синтаксиса регулярных выражений, который используется по умолчанию ).