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
Dexygen
fuente
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

Dir.pwd Parece funcionar.

http://ruby-doc.org/core/Dir.html#method-c-pwd

usuario85509
fuente
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)

Psylone
fuente
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
59

En cuanto a la ruta relativa al script de ejecución actual, desde Ruby 2.0 también puede usar

__dir__

Esto es básicamente lo mismo que

File.dirname(__FILE__)
Tú haces
fuente
esto imprimirá el directorio de trabajo donde se ejecuta el script como dijo @Brandon.
aldrien.h
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"

Jordan Rumpelstiltskin Nemrow
fuente
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__)
Châu Hồng Lĩnh
fuente
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"
yeshwant singh
fuente