Команда оболочки 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
- или в дочернем процессе - в этом случае вы должны выполнить некоторую команду после компакт-диска.