2008-09-08 9 views
20

¿Cómo maneja Unix el nombre de la ruta completa con espacio y argumentos?
En Windows citamos la ruta y añadimos los argumentos de la línea de comandos, ¿cómo está en Unix?¿cómo maneja Unix el nombre de la ruta completa con espacio y argumentos?

"c:\foo folder with space\foo.exe" -help 

actualización:

que quería decir ¿cómo reconozco una trayectoria desde los argumentos de línea de comandos.

+0

¿Puedes dar un ejemplo de lo que quieres decir con "reconocer una ruta desde los argumentos de la línea de comando"? Puede valer la pena comenzar una nueva pregunta ya que todos respondieron la primera parte. – rjmunro

Respuesta

9

Puede citar si lo desea, o puede escapar de los espacios con una \ precedente, pero la mayoría de las rutas de UNIX (Mac OS X a un lado) no tienen espacios en ellas.

/Applications/Image\ Capture.app/Contents/MacOS/Image\ Capture 

"/Applications/Image Capture.app/Contents/MacOS/Image Capture" 

/Applications/"Image Capture.app"/Contents/MacOS/"Image Capture" 

Todos se refieren al mismo ejecutable bajo Mac OS X.

No estoy seguro de lo que quiere decir sobre el reconocimiento de un camino - si cualquiera de las rutas anteriores se pasa como un parámetro a un programa de la shell colocará toda la cadena en una variable; no es necesario analizar múltiples argumentos para obtener la ruta completa.

1

que usted puede citar todo el camino que en las ventanas o se puede escapar de los espacios como en:

/foo\ folder\ with\ space/foo.sh -help 

Ambas formas funcionan!

35

Usted puede citar como si fuera tu ejemplo de Windows anterior, o escapar de los espacios con barras invertidas:

"/foo folder with space/foo" --help 
/foo\ folder\ with\ space/foo --help 
+2

Creo que quisiste decir "escapar de los espacios" – cowlinator

3

Dado que los espacios se utilizan para los argumentos de línea de comandos separados, tienen que ser escapado de la cáscara. Esto se puede hacer ya sea con una barra invertida() o comillas:

"/path/with/spaces in it/to/a/file" 
somecommand -spaced\ option 
somecommand "-spaced option" 
somecommand '-spaced option' 

Esto es suponiendo que se está ejecutando desde una shell. Si está escribiendo código, generalmente puede pasar los argumentos directamente, evitando el problema:

Ejemplo en perl. En lugar de hacer:

print("code sample"); sistema ("alguna opción de espacio de comandos");

que puede hacer

print("code sample"); del sistema ("algúncomando", "opción -spaced");

Dado que cuando pasa el sistema() llama a una lista, no rompe argumentos en espacios como lo hace con una sola llamada de argumento.

1

También tenga cuidado con las comillas dobles - en el shell Unix esto expande las variables. Algunos son obvios (como $foo y \t) pero otros no (como !foo).

Para mayor seguridad, ¡utilice comillas simples!

0

Si las formas normales no funcionan, intente sustituir espacios con %20.

Esto funcionó para mí cuando se trata de SSH y otros comandos de estilo de dominio como auto_smb.

0

También me gustaría señalar que, en caso de que esté utilizando argumentos de línea de comando como parte de un script de shell (archivo .sh), entonces dentro del script, deberá incluir el argumento entre comillas. Así que si su comando se parece

>scriptName.sh arg1 arg2 

Y arg1 es el camino que tiene espacios, entonces dentro de la secuencia de comandos shell, que tendría que referirse a ella como "$ arg1" en lugar de $ arg1

Here are the details

Cuestiones relacionadas