¿Puede un script Ruby decir en qué directorio está?


Inspirado por " Obteniendo el directorio fuente de un script Bash desde dentro de", ¿cuál es la forma Ruby de hacer esto?

Author: Community, 2010-02-05

4 answers

File.dirname(__FILE__) le dará la ruta relativa al script que se está ejecutando. File.expand_path(File.dirname(__FILE__)) te dará el camino absoluto.

 42
Author: gaqzi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-05 11:17:42

Use __dir__

A partir de Ruby 2.0, __dir__ es la forma más sencilla de obtener esto. It

Devuelve la ruta absoluta canónica del directorio del archivo de la cual se llama este método.

Ver el __dir__ documentación, y " ¿Por qué __FILE__ mayúscula y __dir__ minúscula?".

 30
Author: Nathan Long,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-16 13:24:16

Uso __dir__

File.dirname(__FILE__) no es una forma adecuada de obtener el directorio donde se almacena el script.

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

Por ejemplo:

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

Para el archivo de script almacenado en /Desktop/tmp ejecutándolo dará salida

/home/mateusz/Desktop/tmp
/home/mateusz/Desktop
 3
Author: Mateusz Konieczny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-28 07:51:42

ENV["PWD"] parece la forma más sencilla para mí bajo Linux. No conozco una forma de ser agnóstico.

 -5
Author: Shadowfirebird,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-05 11:27:17