Я пытаюсь сохранить вывод команды в файл. Команда:
clang -Xclang -ast-dump -fsyntax-only main.cpp > output.txt
Однако полученный файл output.txt при открытии (с помощью gedit и jedit в ubuntu) дает мне следующее:
[0;1;32mTranslationUnitDecl[0m[0;33m 0x4192020[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x4192558[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __int128_t[0m [0;32m'__int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192270[0m [0;32m'__int128'[0m
[0;34m|-[0m[0;1;32mTypedefDecl[0m[0;33m 0x41925b8[0m <[0;33m<invalid sloc>[0m> [0;33m<invalid sloc>[0m implicit[0;1;36m __uint128_t[0m [0;32m'unsigned __int128'[0m
[0;34m| `-[0m[0;32mBuiltinType[0m[0;33m 0x4192290[0m [0;32m'unsigned __int128'[0m
...
Когда это действительно должно выглядеть так:
TranslationUnitDecl 0x4e46020 <<invalid sloc>> <invalid sloc>
|-TypedefDecl 0x4e46558 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128'
| `-BuiltinType 0x4e46270 '__int128'
|-TypedefDecl 0x4e465b8 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128'
| `-BuiltinType 0x4e46290 'unsigned __int128'
...
Я думал, что это может быть проблема кодирования, я проверил кодировку файла, file -bi output.txt
который выводит text/plain; charset=us-ascii
.
Я подумал, может быть, если я изменю кодировку на utf-8, проблема будет исправлена, поэтому я попробовал это:
clang -Xclang -ast-dump -fsyntax-only main.cpp | iconv -f us-ascii -t UTF-8 > output.txt
но это не имело значения.
Что я могу сделать, чтобы решить эту проблему?
Проблема не в том, что я пытаюсь просмотреть выделенную синтаксисом версию (у меня не было проблем с ее просмотром). Мне нужно сохранить AST, сгенерированный clang, в файл, а затем проанализировать его, что было бы трудно с информацией о цвете, оставшейся в.
>
не генерирует вывод, он просто указывает оболочке, что вы хотите поместить вывод вашейclang
команды в данный файл, а не в терминал. После этого вы просматриваете его способом, который не позволяет цветовые коды таким же образом. Если бы вы былиcat
в файле, он работал бы так, как бы управлял терминал, и вы можете сделатьless
то же самое с-R
флагом.