Какой «правильный» формат для переменной среды HTTP_PROXY? Заглавные буквы или нет?

Вот как это сделать в sed :

sed -n '/$$</! H; /$$</{x; s/\n/\t/gp}; ${x; s/\n/\t/gp}' stage1 > stage3

По частям:

  • sed -n означает, что вывод по умолчанию не выводится (т. Е. массовый ввод); выводится только при наличии команды p .
  • / $$ означает, что когда вы видите строку не , содержащую $$ <, добавьте ее в « h старое пространство» (т. Е. , плацдарм). ! инвертирует обычную логику, означает «сделайте это для строк, которые не удовлетворяют этому условию». Если вам нужно игнорировать $$ <, которое встречается в середине строки, измените эту (и следующую команду) на / ^ $$ . (Если вам нужно обработать $$ < в середине строки другим способом - например, вставить перед ним новую строку - измените свой вопрос, чтобы указать это.)

    Если вы добавляете строку в удерживаемое пространство, когда там уже что-то есть (в удерживаемом пространстве), sed вставляет новую строку между ними, , так что это создаст текст в пространство удержания, которое выглядит следующим образом:

     $$ <002L_tbfl  новая строка  Предполагаемый фактор транскрипции 001R;  новая строка  GO: 0006355… 

    Пространство удержания, как "пространство шаблонов" "(обычный буфер рабочей строки) обычно не будет иметь явного перевода строки в конце (это неявно). Конечно, можно явно вставлять символы новой строки в пробелы.

  • / $$ означает выполнение команд в фигурных скобках в строках, содержащих $$ <.

    • x означает, что e x изменяет содержимое пространства хранения и пространства шаблонов.
    • s / \ n / \ t / gp означает - ну это очевидно, не так ли? - означает замену новой строки табуляцией (в пространстве шаблона) g локально и p запечатать результат.

    Когда эта команда считывает первую строку вашего ввода (которая действительно содержит $$ <), x перемещает эту строку ( $$ <002L_tbfl ) из пространства шаблонов в пространство хранения и перемещает предыдущее содержимое пространства хранения в пространство шаблонов. Но поскольку исходное содержимое удерживаемого пространства ничего не значит, это означает, что команде s не над чем работать. Впоследствии, когда вы увидите $$ < (например,в строке 7), он переносит текст со встроенными символами новой строки (как показано выше) в пространство шаблонов и (как описано) заменяет все символы новой строки табуляциями и печатает результат.

  • $ {…} означает выполнение команд в фигурных скобках , когда вы дойдете до конца ввода. Это те же самые команды, которые мы выполняем, когда видим $$ <, для удаления последней строки (т.е. последней группы строк) {{1 }} из удерживаемого пространства.

Предупреждение: это не гарантирует работу в POSIX sed . Я тестировал его на GNU sed .

27
30.06.2015, 02:37
2 ответа

Стандарта нет, и в зависимости от приложения используются как прописные, так и строчные буквы (см. также HTTPS_PROXY, ALL_PROXY, NO_PROXY).

Например:

curl

ENVIRONMENT VARIABLES

  Curl reads and understands the following environment variables:

        http_proxy, HTTPS_PROXY, FTP_PROXY

  They should be set for protocol-specific proxies. General proxy should be
  set with

        ALL_PROXY

  A comma-separated list of host names that shouldn't go through any proxy is
  set in (only an asterisk, '*' matches all hosts)

        NO_PROXY

git

http.proxy
   Override the HTTP proxy, normally configured using the http_proxy, https_proxy, 
   and all_proxy environment variables (see curl(1)). [..]

Python

urllib.request.getproxies()поддерживает как строчные, так и прописные буквы.

Здесь также упоминается проблема безопасности:

Если установлена ​​переменная среды REQUEST_METHOD, которая обычно указывает, что ваш сценарий выполняется в среде CGI, переменная среды HTTP_PROXY (прописная буква _PROXY) будет игнорироваться. Это связано с тем, что эта переменная может быть введена клиентом с использованием HTTP-заголовка «Proxy:». Если вам нужно использовать прокси-сервер HTTP в среде CGI, либо явно используйте ProxyHandler, либо убедитесь, что имя переменной написано в нижнем регистре (или хотя бы суффикс _proxy).


Некоторые приложения позволяют NO_PROXYсодержать звездочки/диапазоны IP-адресов, а другие — нет.


Так что

export https_proxy=$http_proxy HTTP_PROXY=$http_proxy HTTPS_PROXY=$http_proxy NO_PROXY=$no_proxy

должен был тебя прикрыть.

19
27.01.2020, 19:39

WGET-использует настройки прокси только в нижнем регистре!

0
27.01.2020, 19:39

Теги

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