Я использую RVM для изменения версий Ruby в моей среде разработки на базе Mac.
Внутри кода Visual Studio, когда я открываю обычную вкладку «Терминал», меня перетаскивают в оболочку входа в bash с -l
опция, для стандартной конфигурации по умолчанию и как задокументировано здесь :
// VSCode default settings
{
"terminal.integrated.shell.osx": "/bin/bash",
"terminal.integrated.shellArgs.osx": [
"-l"
]
}
Команда RVM, выполняемая вручную из VSCode Terminal, дает мне ожидаемую версию ruby для этого проекта по умолчанию.
$ rvm list
ruby-2.0.0-p648 [ x86_64 ]
ruby-2.1.10 [ x86_64 ]
ruby-2.1.5 [ x86_64 ]
ruby-2.2.10 [ x86_64 ]
ruby-2.2.5 [ x86_64 ]
ruby-2.3.0 [ x86_64 ]
* ruby-2.3.1 [ x86_64 ]
=> ruby-2.3.7 [ x86_64 ]
# => - current
# =* - current && default
# * - default
Однако, когда я настраиваю файл .vscode/tasks.json
для выполнения той же команды, версия Ruby НЕ является правильной версией, а версией по умолчанию в системе.Более того, я не могу фактически использовать rvm use
для переключения версий (см. Сообщение об ошибке ниже)
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Check for RVM",
"type": "shell",
"command": "rvm list && rvm use 2.3.7",
"group": {
"kind": "test",
"isDefault": true
}
}
}
}
Вывод выполнения задачи с сообщением об ошибке о неправильной оболочке входа в систему.
> Executing task: rvm list && rvm use 2.3.7 <
ruby-2.0.0-p648 [ x86_64 ]
ruby-2.1.10 [ x86_64 ]
ruby-2.1.5 [ x86_64 ]
ruby-2.2.10 [ x86_64 ]
ruby-2.2.5 [ x86_64 ]
ruby-2.3.0 [ x86_64 ]
=* ruby-2.3.1 [ x86_64 ]
ruby-2.3.7 [ x86_64 ]
# => - current
# =* - current && default
# * - default
RVM is not a function, selecting rubies with 'rvm use ...' will not work.
You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command.
Please visit https://rvm.io/integration/gnome-terminal/ for an example.
Terminal will be reused by tasks, press any key to close it.
Я даже пытался специально добавить параметр команды -l
bash в качестве аргумента в конфигурации Задачи, но это не работает.
"options": {
"shell": {
"args": "-l"
}
}
Мое понимание, после прочтения эта проблема заключается в том, что конфигурация оболочки терминала и конфигурация оболочки задач - это одно и то же, так есть ли какая-то другая несогласованность между оболочкой терминала и оболочкой задач, которую я пропускаю?Если нет, то что такое в RVM, что мешает ему работать внутри оболочки Task?