J'essaie d'enregistrer la sortie d'une commande dans un fichier. La commande est:
clang -Xclang -ast-dump -fsyntax-only main.cpp > output.txt
Cependant le fichier output.txt résultant lorsqu'il est ouvert (par gedit et jedit sur ubuntu) me donne ceci:
[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
...
Quand ça devrait vraiment ressembler à ça:
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'
...
J'ai pensé que cela pourrait être un problème d'encodage, j'ai vérifié l'encodage du fichier, file -bi output.txt
qui sort text/plain; charset=us-ascii
.
Je pensais que si je modifiais l'encodage en utf-8, le problème serait résolu, j'ai donc essayé ceci:
clang -Xclang -ast-dump -fsyntax-only main.cpp | iconv -f us-ascii -t UTF-8 > output.txt
mais cela n'a pas fait de différence.
Que puis-je faire pour résoudre ce problème?
Le problème n'est pas que j'essaie d'afficher la version surlignée en syntaxe (je n'ai pas eu de problème pour la visualiser en premier lieu). Je dois enregistrer l'AST généré par clang dans un fichier, puis l'analyser, ce qui serait difficile avec les informations de couleur restantes.
>
cela ne génère pas de sortie, il désigne simplement au shell que vous souhaitez placer la sortie de votreclang
commande dans le fichier donné, plutôt que dans le terminal. Après cela, vous le visualisez d'une manière qui n'autorise pas les codes de couleur de la même manière. Si vous étiez danscat
le fichier, cela fonctionnerait comme le terminal prendrait le relais, et vous pouvez faire deless
même avec l'-R
indicateur.