Is it possible to pass arguments to a task in Visual Studio Code
Solution 1
I used the solution from this answer until now, but since Visual Studio Code has now an official support for task prompts I will add it as an answer here.
In your tasks.json file, you add the key inputs
next to your tasks
. This key contains an array with all possible parameters. Note that not every task has to use all of these inputs.
All of these inputs have an id
, which you will use to reference the input in your task.
Now, in the task you only need to add ${input:myInputId}
whereever you need the parameter.
Example:
{
"version": "2.0.0",
"tasks": [
{
"label": "Echo param",
"type": "shell",
"command": "echo ${input:param1}",
"problemMatcher": []
},
{
"label": "Echo without param",
"type": "shell",
"command": "echo Hello",
"problemMatcher": []
},
],
"inputs": [
{
"id": "param1",
"description": "Param1:",
"default": "Hello",
"type": "promptString"
},
]
}
The task Echo param
will open a prompt, which lets you input a string value and it will then print this value. The task Echo without param
will simply print "Hello".
Solution 2
Regarding Input variables, VSCode 1.43 (Feb. 2020) adds a new feature:
promptString Password Input
The "
promptString
" "input
" type can have"password": true
, which will cause the quick input that shows to obscure the typed content like a password.
Solution 3
Here's what is working for me for now - using this to run a golang
snippet with custom arguments.
If you add a keyboard mapping to this, the process is very straightforward.
So far tested this only under Windows - linux version is commented out for that reason
{
"label": "runwithargs",
"type": "shell",
"windows": {
"options": {
"shell": {
"executable": "powershell.exe",
"args": [
"-NoProfile",
"-ExecutionPolicy",
"Bypass",
"-Command"
]
}
},
"command": "",
"args": [
{ "value": "$cmdargs = read-host 'Enter command line arguments';", "quoting": "weak"},
{ "value": "go run ${file} $cmdargs", "quoting": "weak"}
]
},
/*"linux": {
"command": "echo 'Enter command line arguments: '; read cmdargs;",
"args": [ "go run ${file} $cmdargs" ]
},*/
"presentation": {
"panel": "dedicated",
"focus": true
}
}
Comments
-
Luke Sweeney almost 2 years
Here's an example of my
tasks.json
:{ "version": "0.1.0", "tasks": [ { "taskName": "test", "suppressTaskName": true, "command": "python", "args": [ "tests/brewer_tests.py" ], "isTestCommand": true } ] }
I can run this with
shift+cmd+alt+b
. I can also run it withalt+t
, and choose it from the menu. Is it possible to pass additional arguments in that menu? e.g.And you could build it into your task like so:
{ "version": "0.1.0", "tasks": [ { "taskName": "test", "suppressTaskName": true, "command": "python", "args": [ "tests/brewer_tests.py", $arg1 # would resolve to "ARG1" ], "isTestCommand": true } ] }
Or something similar?
-
Robert P almost 6 yearsI have been looking for this for a while now. This solution seems to work pretty good. You can also prompt for multiple arguments, by simply chaining them like this:
$arg1 = read-host 'Arg 1:';$arg2 = read-host 'Arg 2:'
Only drawback I found so far is, that vs code does not like the{"value": "", "quoting": "weak"
-syntax. -
Bence Kaulics almost 6 years@Springrbua This should be added to the base task configuration, right? But still "value" fields inside "args" are incorrect type. It is quite unclear how to apply this answer. I have VS code 1.25.1
-
Robert P almost 6 years@BenceKaulics you can realy just paste this into your tasks. Json File. Then replace the value of the 2nd "value" field with the command you want to execute. As I said, VS code gives a warning, but it seems to work.
-
Michael Jaison G over 4 yearsOfficial documentation in code.visualstudio.com/docs/editor/…