Para el comando: /usr/bin/sh-c «ls 1`» (un acento grave después de 1).

Cómo hacer que se ejecute con éxito? La adición de una barra invertida antes de «`» no funciona.
` es un especial char como sabemos, y traté de que la rodean con una sola cita también (/usr/bin/sh-c «ls 1″‘»), pero que no funciona bien.

El error de siempre son:

% /usr/bin/sh -c "ls 1\`"
Unmatched `
  • ¿Tiene un solo acento grave ? Es 1` el nombre de un archivo ?
  • Sí, la verdad es que puede crear un archivo llamado «1" by issuing command "touch 1«, pero shell simplemente no se puede analizar dentro de las comillas dobles
InformationsquelleAutor | 2009-12-01

3 Comentarios

  1. 46

    Usted necesita para escapar del acento grave, pero también de escape de barra diagonal inversa:

    $ touch 1\` 
    $ /bin/sh-c "ls 1\\`" 
    1` 
    

    La razón que usted tiene que escapar de él «dos veces» es porque vas a introducir este comando en un ambiente (como un script de shell) que interpreta la cadena entre comillas dobles una vez. Entonces consigue interpretado de nuevo por el subshell.

    También se podría evitar la doble cita, y evitar así la primera interpretación:

    $ /bin/sh-c 'ls 1\` 
    1` 
    

    Otra forma es la de almacenar el nombre del archivo en una variable, y utilizar ese valor:

    $ export F='1` 
    $ printenv F 
    1` 
    $ /bin/sh-c 'ls $F' # tenga en cuenta que /bin/sh interpreta $F, no es mi shell actual 
    1` 
    

    Y por último, lo que se trató de trabajar en algunas de las conchas (estoy usando bash, como para los ejemplos anteriores), sólo aparentemente, no con su shell:

    $ /bin/sh-c "ls 1'\`" 
    1` 
    $ csh # entrar en csh, la siguiente línea se ejecuta en el entorno 
    % /bin/sh-c "ls 1'\`" 
    Inigualable `. 
    

    Yo sugiero que evite tales nombres de archivo en el el primer lugar.

Dejar respuesta

Please enter your comment!
Please enter your name here