В чем разница между процессом и оболочкой в vscode tasks.json
В разделе " Пользовательские задачи" в разделе " Задачи в коде Visual Studio" описаны свойства задачи. E сть type
свойство, определяющее тип задачи:
Тип: тип задачи. Для пользовательской задачи это может быть
shell
или жеprocess
, Еслиshell
Если команда указана, команда интерпретируется как команда оболочки (например, bash, cmd или PowerShell). Еслиprocess
указано, команда интерпретируется как процесс для выполнения.
Я не мог понять, в чем разница между ними. Неважно, я выбираю shell
или же process
все результаты выполнения одинаковы.
Так в чем же разница между интерпретацией как команды оболочки и командой, интерпретируемой как процесс, который на самом деле означает выполнение?
3 ответа
Команды оболочки могут выполняться только внутри оболочки, такой как DIR
за cmd
а также if
за bash
, Поэтому, когда вы хотите запустить команды оболочки, вы должны использовать "type": "shell"
Настройка для правильного запуска. Когда вы хотите просто запустить программу, такую как .bat
, .sh
или же .exe
тогда вы можете просто использовать "type": "process"
установка.
Ну , недавно у меня возникла проблема, и я, наконец, решил ее, изменив тип с "процесс" на "оболочку", и я думаю, что это может вам помочь: я пытаюсь запустить более одного файла.cpp, и я использовал подстановочный знак в аргументах: "$ {fileDirname} /.cpp". Когда тип был обработанным, я не могу успешно запустить проект, поскольку он всегда говорит мне: "*.cpp": нет такого файла или каталога, и когда я перехожу на "оболочку", все идет хорошо. Это может быть одно из различий между "процессом" и "оболочкой".
Я думаю разница в следующем:
- : запускает определенную программу (двоичный файл)
- : запускает сеанс оболочки и запускает данную команду внутри этого сеанса оболочки
Если команда, которую вы даете оболочке, это просто (путь) к программе, напримерdate
, результат будет точно таким же.
{
"version": "2.0.0",
"tasks": [
{
"label": "example1",
"type": "process",
"command": "date",
"presentation": {
"reveal": "always"
},
"problemMatcher": []
},
{
"label": "example2",
"type": "shell",
"command": "date",
"presentation": {
"reveal": "always"
},
"problemMatcher": []
}
]
}
Задача, которая использует, вероятно, будет немного быстрее, потому что она не запускает сеанс оболочки.
Но поскольку задача типа создает сеанс оболочки, она может использовать любую команду, которую вы можете ввести в командной строке. Итак, допустим, задача, которую мы хотим запустить,date -u +"%Y-%m-%dT%H:%M:%SZ"
, мы можем сделать это с задачей, но не сprocess
задача.
Пример:
{
"version": "2.0.0",
"tasks": [
{
"label": "example1",
"type": "process",
"command": "date",
"presentation": {
"reveal": "always"
},
"problemMatcher": []
},
{
"label": "example2",
"type": "shell",
"command": "date -u +\"%Y-%m-%dT%H:%M:%SZ\"",
"presentation": {
"reveal": "always"
},
"problemMatcher": []
}
]
}
Так что, как всегда, это зависит от того, что вам нужно или хотите. Лично я считаю задачи типаshell
полезны гораздо чаще.
Еще одно: определение задачи также может иметь"args"
key, куда вы можете отправлять аргументы. Это может позволить вам отправлять аргументы, если вам нужно использовать process. Я не исследовал это, чтобы ответить на этот вопрос.