2017-09-08 2 views
1

Les utilitaires de ligne de commande dans Windows ajoutent CRLF comme nouveau symbole de ligne dans une sortie. Est-ce que quelqu'un sait comment éliminer CR à partir de backticks lors de l'exécution de l'utilitaire de ligne de commande Windows?Comment éliminer les CR à partir des guillemets dans cygwin

Par exemple:

echo "Windows" 
TEST=`cmd /c "echo Win"` 
echo " ${TEST} " | od -t x1 
echo "CYGWIN" 
TEST=`echo Win` 
echo " ${TEST} " | od -t x1 

Sortie:

Windows 
0000000 20 57 69 6e 0d 20 0a 
0000007 
CYGWIN 
0000000 20 57 69 6e 20 0a 
0000006 

Comme vous pouvez le voir, les apostrophes inverses d'écho à partir de Windows sorties symbole supplémentaire CR

+0

Il semble que Cygwin doive supprimer les symboles CRLF des résultats de backtick, mais supprimer uniquement le symbole LF. Il obtient des résultats différents sur Windows et Linux. Résultat sur Windows a un symbole CR supplémentaire et par exemple la comparaison de chaînes, qui fonctionne sous Linux, échoue dans Windows. Donc, je m'attendrais à ce qu'il y ait une option dans Cygwin qui pourrait le changer ou c'est un bug dans Cygwin. – Nik

Répondre

0

Vous pouvez utiliser tr

$ TEST="`cmd /c "echo Win"`" 

$ echo "${TEST}" |od -t x1 
0000000 57 69 6e 0d 0a 
0000005 

$ echo "${TEST}" | tr -d "\r" |od -t x1 
0000000 57 69 6e 0a 
0000004 

Veuillez noter que le dernier "\ n" provient de l'echo cygwin, et non de la sortie CMD de Windows.

$ echo -n "${TEST}" |od -t x1 
0000000 57 69 6e 0d 
0000004 
0

Vous pouvez utiliser le d2u (également appelé dos2unix) commande Cygwin pour convertir les fins de ligne CR LF-LF. Il peut être utilisé pour convertir un fichier sur place, dans un autre fichier ou en tant que filtre dans un pipeline. d2u --help donne une brève aide.

La commande u2d (unix2dos) convertit dans la direction opposée, LF à CR LF terminaisons de ligne.