2012-06-05 13 views
11

¿Cómo se refieren al directorio actual en un script de shellConsulte el directorio actual en un script de shell

Así que tengo este script que llama a otro script en el mismo directorio

#! /bin/sh 

#Call the other script 
./foo.sh 

# do something ... 

Por esta tengo ./foo.sh: No such file or directory

así que lo cambié a:

#! /bin/sh 

#Call the other script 
foo.sh 

# do something ... 

Pero esto llamaría a la secuencia de comandos foo que está, por defecto, en la RUTA. Esto no es lo que quiero.

Entonces la pregunta es, ¿cuál es la sintaxis de hacer './`En un script de shell?

+1

'. /' Significa el _corriente directorio de trabajo_, no _el directorio que almacena el archivo de secuencia de comandos actualmente en ejecución_. No estoy seguro de ningún mecanismo para obtener el directorio que contiene el script en ejecución. Pero si su primer script está en 'PATH', entonces también lo es el segundo script ... – sarnold

Respuesta

18

Si las dos secuencias de comandos están en el mismo directorio y tiene el error ./foo.sh: No such file or directory, la causa más probable es que haya ejecutado la primera secuencia de comandos desde un directorio diferente al que se encuentra en ellas. Coloque lo siguiente en su primera guión para que la llamada a foo.sh funciona independientemente del lugar donde se llama a la primera secuencia de comandos:

my_dir=`dirname $0` 
#Call the other script 
$my_dir/foo.sh 
+0

¡Funciona genial! Gracias –

+0

¿Cómo manejas los espacios en los nombres de los directorios? Se arroja un error – roosevelt

+0

La ruta completa al directorio es '$ PWD/$ mi_dir' –

0

la solución aceptada no funciona si usted tiene un espacio en la ruta de acceso al directorio que contiene los scripts.

Si puede utilizar bash, esto funcionó para mí:

#!/bin/bash 
SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
"${SCRIPTDIR}/foo.sh" 
4

El siguiente código funciona bien con espacios y no requiere bash para trabajar:

#!/bin/sh 

SCRIPTDIR="$(dirname "$0")" 

#Call the other script 
"$SCRIPTDIR/foo.sh" 

Además, si desea utilizar la ruta absoluta, usted puede hacer esto:

SCRIPTDIR=`cd "$(dirname "$0")" && pwd` 
Cuestiones relacionadas