¿Por qué algunos commands se comportan de manera diferente cuando se ejecutan utilizando un alias bash?

Al desarrollar SVN, a veces solo quiero deshacer todos mis cambios y comenzar de nuevo, así que armé un command para revertir todos los files en mi process de pago:

alias "svn-reset"="svn status | perl -nale 'print $F[1] if /^M/' | xargs svn revert" 

Cuando ejecuto el svn status | perl -nale 'print $F[1] if /^M/' | xargs svn revert svn status | perl -nale 'print $F[1] if /^M/' | xargs svn revert svn status | perl -nale 'print $F[1] if /^M/' | xargs svn revert en la línea de command, el código funciona como se esperaba: todos mis files modificados se vuelven a invertir, como se verifica con otro command svn status . Sin embargo, cuando ejecuto svn-reset , obtengo resultados como los siguientes:

 $ svn-reset Skipped 'ARRAY(0x1c2f52a0)' Skipped 'ARRAY(0x1c2f5450)' Skipped 'ARRAY(0x1c2f5410)' 

En este ejemplo, he verificado que tengo tres files modificados en mi process de pago, por lo que parece que el problema es que Perl imprima la información incorrecta. Sin embargo, no conozco casi ningún perl, y no estoy seguro de por qué Perl se comportaría de manera diferente ejecutando un alias bash en comparación con ejecutar el mismo código perl manualmente. ¿Alguna idea?

Esta pregunta se trata de por qué Perl se comporta de manera diferente cuando se ejecuta usando un alias de bash. Si alguien tiene alguna sugerencia para una forma más eficiente de revertir automáticamente todos los files modificados en SVN, estaría interesado en eso también, pero eso no responde mi pregunta.

Intenta escapingte del dólar, para que el shell no sustituya $F con nada cuando crees el alias:

 alias svn-reset="svn status | perl -nale 'print \$F[1] if /^M/' | xargs svn revert" 

Así es como su alias se parece al caparazón

salida del command de alias :

 alias svn-reset='svn status | perl -nale '\''print [1] if /^M/'\'' | xargs svn revert' 

después de escaping $ , se ve así en su lugar:

 alias svn-reset='svn status | perl -nale '\''print $F[1] if /^M/'\'' | xargs svn revert' 

Usó comillas dobles alnetworkingedor del alias, por lo que el shell está expandiendo $ F. Cambiarlo a (no probado):

 alias "svn_reset"="svn status | perl -nale 'print \$F[1] if /^M/' | xargs svn revert"