2011-02-05 13 views
16

¿Quieres crear un alias de este comandocómo escapar comilla simple al establecer alias

find . -name '*.sh' -exec chmod a+x '{}' \; 

y no soy capaz de escapar de las comillas simples al configurar el alias

alias mx='find . -name '*.sh' -exec chmod a+x '{}' \;' 

Cualquier ayuda es apreciado.

+1

ver este http://stackoverflow.com/questions/1250079/bash-escaping-single-quotes- cadenas internas entre comillas simples cuando necesita comillas dobles y comillas simples – yvess

Respuesta

15

Se podía utilizar comillas dobles:

alias mx="find . -name '*.sh' -exec chmod a+x {} \;" 

EDIT: Además, las comillas simples alrededor de la '{} no es necesario.

+0

¿También necesita escapar de la barra inversa ya que está utilizando comillas dobles? '" ... chmod a + x {} \\\; "' –

+0

Funciona bien. FYI, cuando creo un alias como ese, (GNU bash, versión 4.3.11 (1)) cambia automáticamente las comillas dobles en comillas simples, y convierte las comillas simples en ''\' ''. Entonces, el alias mx de arriba se convierte en 'alias mx = 'find. -name '\' '*. sh' \ '' -exec chmod a + x {} \; '' todo por sí mismo, similar a la respuesta de Mark (también es bueno). – Xen2050

14

Lo que quiere es una función, no un alias.

function mx { 
    find . -name '*.sh' -exec chmod a+x '{}' \; 
} 

Esto tendrá el mismo efecto que un alias habría tenido, evita cualquier "soluciones creativas" para hacer el trabajo, y es más flexible si alguna vez necesita la flexibilidad. Un buen ejemplo de esta flexibilidad, en este caso, es permitir al usuario especificar el directorio para buscar y, de forma predeterminada, el directorio actual si no se especifica ningún directorio.

function mx { 
    if [ -n $1 ]; then 
    dir=$1 
    else 
    dir='.' 
    fi 
    find $dir -name '*.sh' -exec chmod a+x '{}' \; 
} 
12

Las otras respuestas contienen mejores solutiuons en esto (y la mayoría) de los casos, pero puede ser que le por alguna razón realmente quiere escapar ', puede hacerlo '"'"' que en realidad termina la cadena, añade un ' escapado por " y comienza la cadena de nuevo.

alias mx='find . -name '"'"'*.sh'"'"' -exec chmod a+x {} \;' 

Más información en How to escape single-quotes within single-quoted strings?

+2

no sabes cómo salvaste mi culo. Dos días estaba sufriendo. '\' ', \ x27 blah blah nada me ayudó. Finalmente '' '' '' me ayudó. +1 para esto. – Reuben

1

Trate

alias mx=$'find . -name \'*.sh\' -exec chmod a+x \'{}\' \\;' 

Desde man bash:

palabras de la forma $ 'cadena' son especialmente tratado. La palabra se expande a cadena, con caracteres de barra invertida escapados como se especifica en el estándar ANSI C. secuencias de escape de barra invertida, si están presentes, son decodificados como sigue:

\\  backslash 
    \'  single quote 
    \"  double quote 
    \n  new line 
    ... 

Ver ejemplo:

echo $'aa\'bb' 
Cuestiones relacionadas