Пожалуйста, помогите мне расшифровать эту строку кода сценария bash
Что это значит?
h2t=$((exec 2>&-; (which lynx >/dev/null && echo lynx -stdin -dump) \
|| which html2text || which cat) |tail -n 1)
В порядке, h2t=...
означает, что он устанавливает переменную.
Я думал, что двойные парены были для арифметических операций. Если это так, я не вижу здесь никакой арифметики, и я полностью сбит с толку.
Конечно, над строкой кода есть 15-строчный блок комментариев, который объясняет намерение. К сожалению, комментарий в юникодной версии древнего шумера, и я не могу его интерпретировать.
** Только шучу! Там нет комментариев.
Приложение: это от https://github.com/micha/resty/blob/master/resty
2 ответа
twalberg в комментарии к моему ответу заметил это. Оказывается внешний $()
назначает командную строку, в зависимости от доступности различных инструментов, которые могут быть в состоянии преобразовать HTML в текст.
Следовательно h2t
содержит либо lynx -stdin -dump
командной строки, или если это не удалось (т.е. lynx
недоступен), html2text
или в крайнем случае cat
, Команды для последних двух поступают из which
заклинания, тот для первого из echo
,
Он конвертирует HTML в текст из стандартного ввода.
Давайте разделим это.
exec 2>&-
устанавливает перенаправление в подоболочку (закрываетсяstderr
IIRC)- следующая суб-оболочка пытается увидеть, установлен ли Lynx, и запускает его, принимая данные от
stdin
, - другие части после
||
не имеет большого смысла, потому что они только оценивают,html2text
а такжеcat
установлены, но не запускайте их - затем мы получаем последнюю строку из этой первой подоболочки
Сотрите это. Так как это echo
это ничего не делает. Похоже, прототипирование для меня.
Разобрав его, чтобы сделать его более читабельным:
$(
exec 2>&-
(
which lynx >/dev/null &&
echo lynx -stdin -dump
) ||
which html2text ||
which cat
) |
tail -n 1
)
Я не помню точное правило для устранения неоднозначности синтаксиса, но оно должно быть проанализировано следующим образом:
h2t=$(
(exec 2>&-; (which lynx >/dev/null && echo lynx -stdin -dump) ||
which html2text ||
which cat) |
tail -n 1
)
Другими словами, подстановка команд, состоящая из подоболочки, переданной в tail
, Подоболочка используется, чтобы обеспечить "область" для exec
команда, после которой другой подоболочек запускает список, чьи 3 команды разделены ||
оператор.