/: es un problema de directorio en bash

Soy bastante nuevo en bash scripting y me ha ido bastante bien, pero me he encontrado con un problema.

Estoy intentando crear un script que use una barra diagonal (/), sin embargo, sigo recibiendo el mensaje de error /: is a directory.

Entonces, básicamente, ¿qué Lo que necesito es pasar el comando test/(hello) a un programa en la terminal. Así que agregué barras invertidas para que funcione: test\/\(hello\), sin embargo , Obtengo este error. ¿Qué está mal aquí?

Comentarios

  • ¿Dónde el script usa la barra diagonal? Parece que está pasando con éxito el argumento al comando / script, pero hay un error en el script. ¿Puede darnos un ejemplo más detallado? Además, ¿No ' no menciona un número de línea o algo?

Responder

Esto solo debería suceder si no está pasando un comando antes del argumento. Necesita invocar comandos como este:

command [args ...] 

Si lo invoca así, funcionará.

$ echo test/\(hello\) test/(hello) 

Para que conste, generalmente es mucho más fácil (y mucho más legible) citar argumentos en lugar de escapar de todos los metacaracteres. Puede hacer esto usando " y " (hay buena información sobre esto aquí ).

Comentarios

  • Upvoted. El shell interpretará texto separado solo por barras como directorios, no comandos / argumentos. La barra inclinada se puede usar en argumentos de, por ejemplo, scripts de Perl (requiere configurar Getopt::Long o escribir el suyo), pero aún requiere el espacio entre el comando y los argumentos; nuevamente, este es un requisito de shell.

Responder

Si necesita pasar la cadena exacta test/(hello) a un programa, colóquelo entre comillas simples:

someprogram "test/(hello)" 

Cada carácter se interpreta literalmente entre comillas simples, excepto el carácter de comillas simples sí mismo. Si necesita un carácter de comilla simple en la cadena, páselo como "\"" (final de la cadena literal, cita el siguiente carácter, comillas simples interpretadas literalmente, comienza la cadena literal).

echo "Lasciate ogne speranza, voi ch"\""entrate" 

Esto no está relacionado con el mensaje de error que muestra aquí. /: is a directory significa que intentó ejecutar / como un programa. Es de suponer que hay un lugar donde intentó escribir la ruta completa a un programa pero dejó un espacio extra, como en

/ path/to/program 

Puede haber otros caracteres de puntuación que hacen este menos obvio, o los personajes de control en ese mensaje. Para facilitar la depuración, coloque set -x en la segunda línea del script, justo después de la línea #! inicial, de modo que el shell imprima un seguimiento de cada línea que ejecuta.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *