Как открыть файлы относительно корневого каталога

Следующие сбои с Errno::ENOENT: No such file or directory, даже если файл существует:

open('~/some_file')

Однако я могу сделать это:

open(File.expand_path('~/some_file'))

У меня есть два вопроса:

  1. Почему не делает open обработать тильду как указывающий на корневой каталог?
  2. Есть ли дождевик путь, чем File.expand_path?
88
задан the Tin Man 29 April 2016 в 23:01
поделиться

1 ответ

  1. Оболочка (bash, zsh и т.д.) отвечает за расширение подстановочных знаков, поэтому в вашем первом примере нет оболочки, следовательно, нет и расширения. Использование тильды для указания на $HOME является простым соглашением; действительно, если вы посмотрите документацию к File.expand_path, она правильно интерпретирует тильду, но это особенность самой функции, а не что-то присущее базовой системе; также, File.expand_path требует, чтобы переменная окружения $HOME была правильно установлена. Что приводит нас к возможной альтернативе...
  2. Try this:

    open(ENV['HOME']+'/some_file')
    

Надеюсь, это достаточно ловко. Я лично думаю, что использование переменной окружения семантически более понятно, чем использование expand_path.

105
ответ дан 24 November 2019 в 07:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: