Команда оболочки CD в Ruby

Я пытаюсь выполнить команды оболочки, используя ruby, но я не могу изменить каталог на PATH с пробелами.

variable = %x[cd #{ENV["HOME"]}/Virtual\\ VMs/]

Это не работает. Спасибо

2 ответа

Чтобы быть абсолютно безопасным:

path = File.join [ENV["HOME"], 'Virtual VMs']
variable = %x[cd '#{path}']

Обратите внимание, что cd имеет пустой вывод, поэтому, чтобы убедиться, что он работает, вероятно, нужно сделать что-то вроде:

path = File.join [ENV["HOME"], 'Virtual VMs']
variable = %x[cd '#{path}' && ls -la]
#⇒ "total 32\ndrwxr-xr-x  ....."

Что делать? Вы пытаетесь зайти в каталог, но затем ничего не делаете в нем. Ваш variable будет пустым в любом случае. Помимо того, что это бессмысленно делать, вы не можете надежно выполнить CD таким образом, потому что это не исполняемый файл. Вы можете увидеть это, если просто выполнить %x[cd], Вы получите Errno::ENOENT исключение.

Может быть, вы должны сначала описать в более широком контексте, что вы хотите достичь с помощью своего кода. Где бы вы хотели изменить рабочий каталог? В рамках процесса Ruby - в этом случае вы должны использовать Dir.chdir - или в дочернем процессе - в этом случае вы должны выполнить некоторую команду после компакт-диска.

Другие вопросы по тегам