Похоже, вы хотели бы иметь сканер синтаксиса оболочки и синтаксический анализатор, который выводит найденные токены и действия, которые он предпринимает на пути к выполнению фактической команды.
Я не знаю ни одной оболочки, которая делает это, так как это значительно замедлит обработку, а также создаст огромное количество вывода для каждой даже немного сложной команды.
С bash
, если вы компилируете оболочку самостоятельно с помощью макроса DEBUG
, определенного и , если вы включаете все закомментированные вызовы функции itrace()
в исходном коде оболочки 1 , тогда вы сможете получить немного того, что хотите увидеть:
bash-4.4$ if [[ "$BASHPID" = 10 ]] && [[ "$USER" = myself ]]; then echo hello me; fi
TRACE: pid 22914: parse_matched_pair[9]: open = " close = " flags = 0
TRACE: pid 22914: parse_matched_pair[9]: returning $BASHPID"
TRACE: pid 22914: parse_matched_pair[9]: open = " close = " flags = 0
TRACE: pid 22914: parse_matched_pair[9]: returning $USER"
TRACE: pid 22914: param_expand: `$BASHPID' pflags = 0
Здесь вы можете увидеть, как синтаксический анализатор выводит несколько отладочных операторов о поиске открывающих и закрывающих двойных кавычек и переменных оболочки. Позже другой шаг обработки сообщает нам, что выполняется расширение параметра $BASHPID
, но перечислены далеко не все шаги.
Этот тип выходных данных отладки из bash
более полезен для людей, действительно занимающихся написанием и модификацией исходного кода оболочки, и определенно не предназначен для того, чтобы служить способом понимания разбора оболочки и интерпретации его входных данных.
Чтобы лучше познакомиться с синтаксисом и грамматикой оболочки, я предлагаю начать с определения грамматики оболочки POSIX (, которое довольно сложно и более или менее бессмысленно для тех, кто не могу прочитать EBNF).
1За исключением одного в lib/glob/glob.c
, в котором есть синтаксическая ошибка.
Что ж, предоставленная вами ссылка на "Wayback Machine" была HTML-страницей, которую вы хотитеwget https://web.archive.org/web/20200726034218if_/http://www.abook.cn/pdf/H-0552.0101.pdf
Это можно найти, просмотрев исходный код страницы,и найти iframe, который загружает PDF,<iframe id="playback" src=
Тем не менее, я лично рекомендую вам сохранить этот файл на вашем собственном веб-сервере, CDN и т. д. -, а затем извлечь его оттуда.