2010-02-05 8 views

Respuesta

38

File.dirname(__FILE__) le dará la ruta relativa al script que se está ejecutando. File.expand_path(File.dirname(__FILE__)) le dará la ruta absoluta.

+0

Ésta es la manera incorrecta de hacer eso y puede provocar errores. \t Tenga en cuenta que una vez que uno utilizó Dir.chdir puede ser un directorio diferente de donde se almacena la secuencia de comandos. '__dir__' es la forma correcta de hacerlo. –

+0

Esta parece ser la única forma de que alguien se quede atrapado en Ruby <2.0 –

-4

ENV ["PWD"] parece la manera más simple para mí en Linux. No sé de una manera agnóstica del sistema operativo.

+0

¡Gracias! Bueno para mi conocimiento general específico de Linux. –

+0

Ese es el directorio de inicio, no el directorio de trabajo actual o el directorio donde se encuentra el script. –

+0

B * gger, la falta de sueño hará eso. Quise decir ENV ["PWD"] por supuesto. Pero la respuesta de ba es mucho mejor. – Shadowfirebird

23

Uso __dir__

A partir de Rubí 2.0, __dir__ es la forma más sencilla de conseguir esto. Se

Devuelve la ruta absoluto simplificado del directorio del archivo desde el que se llama a este método.

Consulte la documentación de __dir__, y "Why is __FILE__ uppercase and __dir__ lowercase?".

+0

Bueno, aparte de que '__dir__' era la respuesta correcta, gracias por vincular también a la diferencia de mayúsculas y minúsculas, fue mi primera pregunta después de encontrarlo bien :) – SidOfc

2

uso __dir__

File.dirname(__FILE__) no es una forma correcta de obtener el directorio donde se almacena la secuencia de comandos.

Al inicio, el directorio y el directorio de trabajo con el archivo de script es el mismo, pero puede cambiar.

Por ejemplo:

Dir.chdir('..') do 
    puts __dir__ 
    puts File.expand_path(File.dirname(__FILE__)) 
end 

de archivo de script almacenado en /Desktop/tmp ejecutarlo dará salida

/home/mateusz/Desktop/tmp 
/home/mateusz/Desktop 
Cuestiones relacionadas