использование _ <вместо <для stdin, использующего удар

Тайм-аут настраивается в /etc/resolv.conf с timeout параметр.

Попытка, добавляющая строку: option timeout: кому: /etc/resolv.conf.

От resolv.conf страница справочника:

      timeout:n
             sets  the  amount  of  time the resolver will wait for a response from a remote name server before retrying the
             query via a different name server.   Measured  in  seconds,  the  default  is  RES_TIMEOUT  (currently  5,  see
             ).  The value for this option is silently capped to 30.

Кредиты переходят к http://www.linuxquestions.org/questions/linux-general-1/linux-dns-resolution-timeout-869229/.

4
19.06.2014, 15:29
2 ответа

Это не оператор _<, это аргумент _ для передачи на чтение и оператор перенаправления <. <(cmd) сам по себе является подстановочным процессом (который расширяется до имени файла, указывающего на трубу).

Выполняется:

read bytes _  < /proc/self/fd/x

Где fd x - читающий конец трубы.

На другом (записывающем) конце трубы выполняется процесс фоновой подоболочки du -bcm random_iso. iso | tail -1, при этом его stdout перенаправляется в эту трубу.

Таким образом, read будет хранить в переменной $bytes первое слово последней строки вывода du -bcm, а остальная часть строки - в переменной $_.

Теперь я не знаю, где это du -bcm имеет смысл. Ни один из вариантов -b, -c или -m не является стандартным. В то время как -c является довольно распространенным и служит для указания суммарного размера, с GNU - du, -b заключается в получении размера файла (а не использования диска) в байтах, в то время как -m нужно округлить размер до следующего мебибайта, чтобы они были конфликтующими опциями (хотя, возможно, они использовали -b для его побочного эффекта включения --видимого размера). FreeBSD du имеет -m (для мебибайтов), нет -b, Solaris не имеет ни того, ни другого...

Похоже, что это был замысловатый способ записи:

wc -c < random_iso.iso

Или:

du --apparent-size -cm random_iso.iso | awk 'END{print $1}'

Если бы они действительно хотели, чтобы размер файла округлялся до следующего мебибайта в системе GNU.

.
15
27.01.2020, 20:45

Как уже упоминалось, _< не является редиректом. Это передача _ в качестве последнего аргумента к читается . Затем < интерпретируется как отдельный оператор перенаправления, перенаправляющий вывод подстановки процесса на stdin.

В Бэш-скриптах стало традиционным использовать _ в качестве "переменной выброса" в сочетании со встроенным read. В bash _ - это специальная переменная, которая устанавливается в конечный аргумент команды после выполнения каждой команды. В этом случае это означает, что первому полю будет присвоено байт, а остальные поля отбрасываются в переменную _, вместо того, чтобы присваивать все оставшиеся поля в байт.

Хотя это и является конвенцией, существует ряд веских причин, чтобы избежать злоупотребления _ таким образом.

  • Это поведение _ не указано POSIX. Большинство оболочек не сделают с ним ничего особенного.
  • В zsh, _ имеет атрибут только для чтения , и использование этого приведет к ошибке оболочки.
  • В мкш, _ имеет только поведение бэша в интерактивном режиме. В неинтерактивном скрипте _ используется для другой цели и после каждой команды ничего не присваивается.
  • в ksh93, _ устанавливается только последний аргумент последней команды в строке. Команды должны быть физически расположены на отдельных строках кода, чтобы можно было использовать _. Кроме того, _ в ksh93 перегружен, чтобы иметь много других применений в различных контекстах, поэтому присвоение _ для этой цели не рекомендуется и будет делать разные вещи в зависимости от контекста.

Я рекомендую перед перенаправлением выделить место, чтобы сделать вещи более понятными. Некоторые рекомендации по хорошему стилю переадресации я поместил в в этой статье .

3
27.01.2020, 20:45

Теги

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