Windows Bash и код Visual Studio: как запустить bash в качестве задачи выполнения?

как я могу запустить Windows Bash из кода Visual Studio в качестве задачи запуска?

Вот некоторые из моих многочисленных попыток tasks.json сделать это.

{
    "version": "0.1.0",
    "command": "cmd",
    "isShellCommand": true,
    "args": [ "RunShellScript.bat" ],
    "showOutput": "always"
}

В RunShellScript.bat есть только эта строка: bash myShellScript.sh. Что, если вы просто откроете cmd с самого начала и наберете эту строку, она будет выполнена. Он также отлично работает, если вы просто дважды щелкните файл. Однако при запуске из VSCode этот вывод просто зависает, пока я его не завершу.

Попытка №2:

{
    "version": "0.1.0",
    "command": "cmd",
    "isShellCommand": true,
    "args": [ "bash myShellScript.sh" ],
    "showOutput": "always"
}

Это также зависает, как и выше.

Попытка №3:

{
    "version": "0.1.0",
    "command": "C:/Windows/System32/bash",
    "isShellCommand": false,
    "args": [ "myShellScript.sh" ],
    "showOutput": "always"
}

Это дает мне:

Failed to launch external program C:/Windows/System32/bash myShellScript.sh
spawn C:/Windows/System32/bash ENOENT

Я также экспериментировал с установкой переменной "isShellCommand" в значения true и false в некоторых из этих случаев, но безрезультатно.

Кто-нибудь знает как это сделать?


person RestlessAPI    schedule 16.05.2016    source источник


Ответы (3)


Я тоже искал, как я мог бы сделать то же самое.

andlrc - я пробовал два ваших варианта, и ни один из них, похоже, не помогает. Проблема, похоже, заключается в том, что bash не распознается в любом контексте, в котором Visual Studio Code запускает его. Я пробовал различные подходы:

  • "команда": "C:/Windows/System32/bash.exe"
  • "команда": "баш"
  • "команда": "bash.exe"

Я буду продолжать пытаться и отпишусь, если у меня что-то получится.

Изменить: Понятно. Кредит этому человеку - https://aigeec.com/using-windows-10-anniversary-bash-with-visual-studio-code/

Таким образом, все сводится к тому, что я работаю в 64-битной операционной системе, что означает, что bash.exe находится в C:\Windows\System32. Как только я скопировал bash.exe в SysWOW64, как предлагается в сообщении в блоге, действие сборки по умолчанию (Ctrl + Shift + B) кода Visual Studio выполняется, как вы и ожидали.

Это кажется немного хакерским обходным путем — вероятно, стоит поднять его с помощью MSFT, чтобы посмотреть, можем ли мы что-то с этим сделать.

Изменить: вот мой файл tasks.json по запросу:

{
  // See https://go.microsoft.com/fwlink/?LinkId=733558
  // for the documentation about the tasks.json format
  "version": "0.1.0",
  "command": "bash",
  "isShellCommand": true,
  "args": [ "./gulp.sh" ],
  "showOutput": "always",
  "tasks": [{
    "taskName": "scripts",
    "isBuildCommand": true,
    "problemMatcher": "$gulp-tsc",
    "isWatching": true
  }]

}

gulp.sh содержит только одну команду; 'gulp' :-), но вы можете поместить туда все, что захотите, я полагаю, у вас может быть несколько сценариев .sh для обслуживания разных лент задач.

В ответ на использование Sysnative, к сожалению, он этого не понимает, и задача сборки не запускается.

person Jason Dunbar    schedule 16.05.2016
comment
Менее хакерским решением было бы попытаться запустить C:\Windows\sysnative\bash.exe. - person Ross Ridge; 16.05.2016
comment
Не могли бы вы отредактировать свой пост, включив в него также файлы tasks.json или launch.json, которые вы использовали? - person RestlessAPI; 17.05.2016
comment
Мое так называемое "решение" по какой-то причине перестало работать... Расследую. - person Jason Dunbar; 17.05.2016
comment
Джейсон: см. комментарий от @RossRidge: вам нужно изменить команду для вызова c:\\Windows\\sysnative\\bash.exe - person Rich Turner; 03.12.2016
comment
Это мне очень помогло. Я также добавил --login к аргументам, чтобы .bashrc выполнялся, чтобы убедиться, что моя среда настроена правильно. - person Matt; 28.05.2017

На моей машине с Windows 10, на которой только что установлен bash, у меня это работает нормально:

{
    "version": "0.1.0",
    "command": "bash",
    "isShellCommand": true,
    "args": [ "shellscript.sh" ],
    "showOutput": "always"
}

Shebang-версия shellscript.sh как command у меня не работает.

Вы также можете использовать bash -c "<command>" для запуска произвольной команды:

{
    "version": "0.1.0",
    "command": "bash",
    "isShellCommand": true,
    "args": ["-c", "echo \"test\""],
    "showOutput": "always"
}

введите здесь описание изображения

person Daniel Imms    schedule 22.05.2016
comment
32 или 64 бит? а что у тебя в shellscript.sh? Я обратился к Microsoft с вопросом по этому поводу, и они смогли воспроизвести те же проблемы, что и у меня — ссылка< /а> - person Jason Dunbar; 25.05.2016
comment
64 бит, давайте перенесем обсуждение на github. - person Daniel Imms; 25.05.2016

Пытаться:

{
    "version": "0.1.0",
    "command": "bash",
    "isShellCommand": true,
    "args": [ "myShellScript.sh" ],
    "showOutput": "always"
}

Или вы можете добавить shebang в свой файл:

#!/bin/bash

а затем пропишите путь к скрипту:

{
    "version": "0.1.0",
    "command": "/path/to/script.sh",
    "isShellCommand": true,
    "args": [],
    "showOutput": "always"
}
person andlrc    schedule 16.05.2016
comment
В моем сценарии есть шебанг вверху, но я попробую оба из них. - person RestlessAPI; 16.05.2016