2009-12-21 27 views
218

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? Al parecer, desde un script que es posible utilizando File.expand_path(__FILE__)cómo obtener la ruta absoluta del directorio de trabajo actual desde irb

Pero desde IRB He intentado lo siguiente y consiguió un "Permiso denegado" error:

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

La cuestión no es realmente clara: ¿Quieres a) el directorio de trabajo actual (que es 'Dir.pwd') o quieres el directorio en la actualidad Se encuentra el script en ejecución (que es 'File.dirname (__ FILE __)')? Imagine que llama a 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 de acceso absoluta * del directorio de trabajo actual ... ". ¿Qué no está claro? –

+4

no está claro debido a la oración "Aparentemente de un script es posible usar' File.expand_path (__ FILE __) '" - porque la ubicación de '__FILE__' es un animal diferente del actual directorio de trabajo (que es' Dir.pwd'). – amenthes

Respuesta

160

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

Pero Dir.pwd devuelve el directorio de trabajo (resultados idénticos a ejecutar pwd en su terminal)

+2

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

+1

eche un vistazo a la clase Pathname que a menudo se olvida: http://www.ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html – awenkhh

+0

Existe un problema, Dir.pwd imprima el directorio de trabajo donde se ejecuta el script, que puede no ser lo que desea. – Brandon

4

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

File.dirname(__FILE__) 

Ejemplo:

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

resultado: "/ Usuarios/nemrow/SITM/carpeta1/carpeta2"

+0

Tenga en cuenta que el directorio de trabajo no debe ser el mismo que el archivo real. Entonces 'Dir.pwd' y tu sugerencia podrían diferir. – Besi

42

en cuanto a la ruta relativa a la secuencia de comandos de ejecución actual, ya que Rubí 2.0 también se puede utilizar

__dir__ 

Así que esto es básicamente el mismo que

File.dirname(__FILE__) 
+8

Me pregunto por qué la inconsistencia, ¿por qué no '__DIR__'? – Zequez

+11

@Zequez Porque ['__FILE__' es una constante, pero' __Dir__' es un método] (http://stackoverflow.com/a/15190725/405017). – Phrogz

+0

esto imprimirá el directorio de trabajo de donde se ejecuta el script como dijo @Brandon. –

1

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

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

través de este se puede obtener la ruta absoluta de cualquier archivo ubicado en cualquier directorio.

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

Esto devolverá

=> "/User/abc/xyz/some-dir/some-file-name" 
Cuestiones relacionadas