cómo obtener la ruta absoluta del directorio de trabajo actual de irb


273

Estoy ejecutando Ruby en Windows, aunque no sé si eso debería marcar la diferencia. Todo lo que quiero hacer es obtener la ruta absoluta del directorio de trabajo actual. ¿Es esto posible desde irb? Aparentemente desde un script es posible usarFile.expand_path(__FILE__)

Pero desde irb intenté lo siguiente y obtuve un error de "Permiso denegado":

File.new(Dir.new(".").path).expand

10
La pregunta no está realmente clara: ¿desea a) el directorio de trabajo actual (que es Dir.pwd) o quiere el directorio donde se encuentra el script que se está ejecutando actualmente (que es File.dirname(__FILE__))? Imagina llamar un script desde cualquier otro lugar (como ruby testdirectory/testscript.rb) aquí, ¡los dos serán diferentes!
Amenthes

1
@amenthes Usted afirma que mi pregunta no está clara y luego pregunta "¿Desea a) el directorio de trabajo actual ..." y mi pregunta dice "Todo lo que quiero hacer es obtener la ruta absoluta del directorio de trabajo actual ...". ¿Qué no está claro?
Dexygen

77
no está claro debido a la oración "Aparentemente de un script es posible usar File.expand_path(__FILE__)", porque __FILE__la ubicación es un animal diferente al directorio de trabajo actual (que es Dir.pwd).
Amenthes

2
@amenthes Pensé que hice un buen trabajo al diferenciar "de irb", que está justo en el título de la pregunta (y dos veces dentro de la pregunta en sí), de "de un guión"
Dexygen

Respuestas:


515

44
Han pasado casi 10 años, pero aún así, gracias por esta respuesta.
Nick Schwaderer

1
Nota: esto no devuelve la ubicación del archivo actual. Para hacerlo, vea las respuestas a continuación. Esto solo devuelve el directorio de trabajo actual del shell que está llamando al script (al igual que pwd), que podría ser en algún lugar completamente diferente de donde se encuentra el archivo de script.
PIB2

186

File.expand_path File.dirname(__FILE__) devolverá el directorio relativo al archivo desde el que se llama este comando.

Pero Dir.pwddevuelve el directorio de trabajo (resultados idénticos a la ejecución pwden su terminal)


3
Dir.pwdes equivalente a pwd -P. exec('pwd -L')obtendrá el equivalente de pwd en el terminal (pwd normalmente es un bash incorporado, y no resuelve enlaces simbólicos).
Barry Kelly

1
Por favor, eche un vistazo a la clase Pathname
awenkhh

1
Hay un problema, Dir.pwd imprimirá el directorio de trabajo donde se ejecuta el script, que puede no ser lo que desea.
Brandon

Sí, suponiendo que ejecute el comando bundle exec rspec specen el directorio '/ project', mientras que en el archivo 'spec / spec_helper.rb', el valor de Dir.pwdtodavía será '/ project'.
colmena


6

Esto le dará el directorio de trabajo del archivo actual.

File.dirname(__FILE__)

Ejemplo:

archivo_actual: "/Users/nemrow/SITM/folder1/folder2/amazon.rb"

resultado: "/ Users / nemrow / SITM / folder1 / folder2"


1
Tenga en cuenta que el directorio de trabajo no debe ser el mismo que el archivo real. Entonces, Dir.pwdy su sugerencia podría diferir potencialmente.
Besi

4

Si desea obtener la ruta completa del directorio del archivo rb actual:

File.expand_path('../', __FILE__)

3

A través de esto, puede obtener la ruta absoluta de cualquier archivo ubicado en cualquier directorio.

File.join(Dir.pwd,'some-dir','some-file-name')

Esto volverá

=> "/User/abc/xyz/some-dir/some-file-name"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.