Sto cercando di salvare l'output di un comando in un file. Il comando è:
clang -Xclang -ast-dump -fsyntax-only main.cpp > output.txt
Tuttavia il file output.txt risultante quando aperto (da gedit e jedit su Ubuntu) mi dà questo:
[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
...
Quando dovrebbe davvero apparire così:
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'
...
Ho pensato che potesse essere un problema di codifica, ho controllato la codifica del file, file -bi output.txt
che genera text/plain; charset=us-ascii
.
Ho pensato che se avessi cambiato la codifica in utf-8 il problema sarebbe stato risolto, quindi ho provato questo:
clang -Xclang -ast-dump -fsyntax-only main.cpp | iconv -f us-ascii -t UTF-8 > output.txt
ma non ha fatto differenza.
Cosa posso fare per risolvere questo problema?
Il problema non è che sto provando a visualizzare la versione evidenziata dalla sintassi (in primo luogo non ho avuto problemi a visualizzarla). Devo salvare l'AST generato da clang in un file e quindi analizzarlo, il che sarebbe difficile con le informazioni sul colore rimaste.
>
non genera output, indica semplicemente alla shell che si desidera inserire l'output delclang
comando nel file specificato, anziché il terminale. Dopo di che lo stai visualizzando in un modo che non consente i codici colore allo stesso modo. Se tu fossicat
sul file, funzionerebbe come il terminale prenderebbe il controllo e puoiless
fare lo stesso con la-R
bandiera.