Task 입력값으로 재사용 가능한 명령 만들기
promptString과 pickString을 한 Task에 연결해, 실행할 때마다 대상과 모드를 바꿔 쓰고 민감정보는 구성에 남기지 않습니다.
이번 편의 핵심
같은 Task를 두 번 실행해 첫 번째는 sample-one · dry-run, 두 번째는 sample-two · normal이 Terminal에 표시되면 완료입니다.
비슷한 Task를 여러 개 복사하지 않고, 실행 시점의 비민감 입력값만 바꿔 반복 작업을 재사용합니다.
1. 시작하기 전에
이 실습은 JSON 파일 하나를 편집하고 고정된 PowerShell 출력 명령을 실행하는 중간 난이도 작업입니다. 데이터 삭제는 없지만 Task가 셸을 실행하므로 명령 전체를 먼저 읽어야 합니다.
준비할 것
- 직접 만든 빈
task-input-demo폴더 — Explorer에서 기존 프로젝트 파일과.vscode/tasks.json이 없는지 확인합니다. - VS Code Stable — 이 Run은 Windows x64의 1.131.0에서 버전을 확인했습니다.
- PowerShell — 새 Terminal의 프로필 이름으로 확인합니다.
- 공개해도 되는 연습용 문자열 — 암호·토큰·API 키는 입력하지 않습니다.
적용 환경 Windows 11 · VS Code Stable 1.131.0 Windows x64 · PowerShell · 일반 사용자 권한 · 확장 기능 불필요
UI 언어는 확인하지 못했으므로 Command Palette에서 영문 명령명과 핵심 검색어를 사용합니다. macOS·Linux에서는 inputs 구조는 같지만 아래 PowerShell 셸 예제를 그대로 실행하지 말고 해당 셸용 명령을 별도로 검증해야 합니다.
command가 Write-Output 두 번만 수행하는지 확인하세요. 삭제, 파일 쓰기, 다운로드, 권한 상승, 외부 전송 또는 알 수 없는 실행 파일이 보이면 실행하지 않습니다. 보호 대상: 기존 프로젝트 파일, 사용자 설정, 계정 자격 증명. 중단 조건: 기존 Task 파일, 이해하지 못한 명령, 실제 민감정보. 되돌리기: 실행 중이면 Tasks: Terminate Task로 중단하고 연습 Workspace를 닫습니다.2. 알아둘 핵심 개념
inputs
tasks.json과 launch.json에서 사용자 입력 변수를 정의하는 배열입니다. 각 항목은 고유한 id를 가지며 Task에서는 ${input:id} 형식으로 참조합니다.
promptString
실행 시 텍스트 입력 상자를 엽니다. description은 질문 문구이고 default는 사용자가 바꾸지 않았을 때의 값입니다. password: true는 입력 화면의 글자를 숨길 뿐 보안 저장소를 제공한다는 뜻이 아닙니다.
pickString
실행 시 미리 정한 선택지를 Quick Pick 목록으로 보여 줍니다. 객체 형식의 option은 화면에 보이는 label과 Task에 전달되는 value를 나눌 수 있습니다. default는 label이 아니라 실제 value 중 하나여야 합니다.
${input:...} 치환
Task 실행 시 input ID의 결과를 문자열로 바꿉니다. 공식 문서상 Task 변수 치환은 command, args, options에서 지원되며 input 변수 중첩은 지원되지 않습니다. 이 예제는 비민감 값을 셸 명령 문자열에 붙이지 않고 options.env로 전달합니다.
password: true는 화면 표시만 가립니다. 실제 암호·토큰·API 키를 default, options, command, args, options.env에 저장하지 마세요. 실제 비밀값이 필요하면 조직이 승인한 자격 증명 관리자나 대상 도구의 로그인 흐름을 사용합니다.3. 순서대로 진행하기
각 단계의 정상 결과를 확인한 뒤 다음 단계로 이동합니다.
1. 빈 연습 폴더 열기
목적 기존 프로젝트와 Task 설정을 보호합니다.
- 직접 만든 빈
task-input-demo폴더를 File > Open Folder...로 엽니다.
입력 위치 VS Code 메뉴와 Explorer
Artifact 직접 만든 빈 Workspace 폴더
정상 결과 Explorer 최상위에 task-input-demo만 보입니다.
확인 기존 파일과 .vscode/tasks.json이 없는지 확인합니다.
실패 신호 다른 프로젝트 파일이나 기존 Task 설정이 보입니다.
2. Task 구성 파일 만들기
목적 Workspace 전용 Task 파일을 승인된 위치에 만듭니다.
- Ctrl+Shift+P에서 Tasks: Configure Task를 실행하고 Create tasks.json file from template > Others를 선택합니다.
입력 위치 Command Palette
Artifact .vscode/tasks.json
정상 결과 .vscode/tasks.json 편집 탭이 열립니다.
확인 Explorer에서 파일 경로가 현재 Workspace 아래인지 확인합니다.
실패 신호 User Tasks나 다른 폴더의 파일이 열립니다.
3. 입력형 Task 구성 저장하기
목적 한 Task에 텍스트 입력과 선택 입력을 연결합니다.
.vscode/tasks.json전체를 아래 JSON으로 바꾸고 저장합니다.
입력 위치 Workspace 루트의 .vscode/tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "입력값 확인: 대상과 모드",
"type": "shell",
"command": "Write-Output ('대상: ' + $env:VSC_TASK_TARGET); Write-Output ('모드: ' + $env:VSC_TASK_MODE)",
"options": {
"shell": {
"executable": "powershell.exe",
"args": ["-NoLogo", "-NoProfile", "-Command"]
},
"env": {
"VSC_TASK_TARGET": "${input:targetName}",
"VSC_TASK_MODE": "${input:runMode}"
}
},
"problemMatcher": []
}
],
"inputs": [
{
"id": "targetName",
"type": "promptString",
"description": "실행 대상을 입력하세요 (민감정보 금지)",
"default": "sample-one"
},
{
"id": "runMode",
"type": "pickString",
"description": "실행 모드를 선택하세요",
"options": [
{ "label": "미리 보기", "value": "dry-run" },
{ "label": "일반 실행", "value": "normal" }
],
"default": "dry-run"
}
]
}
정상 결과 파일이 저장되고 빨간 JSON 오류 표시가 없습니다.
확인 targetName, runMode ID와 두 ${input:...} 참조가 정확히 대응하는지 비교합니다.
실패 신호 빨간 밑줄, 알 수 없는 속성, 닫는 괄호 오류가 보입니다.
4. 실행 전 명령 확인하기
목적 Task가 읽기 전용 출력만 수행하는지 Human Gate에서 확인합니다.
tasks[0].command가Write-Output두 번만 포함하는지 읽습니다.
입력 위치 .vscode/tasks.json의 command
Write-Output ('대상: ' + $env:VSC_TASK_TARGET); Write-Output ('모드: ' + $env:VSC_TASK_MODE)
정상 결과 삭제·쓰기·다운로드·권한 상승·외부 전송 명령이 없습니다.
확인 Set-Content, Remove-Item, Invoke-WebRequest, 관리자 실행 문자열이 없는지 확인합니다.
실패 신호 예제에 없는 명령이나 파이프가 보입니다.
5. Task 목록에서 시작하기
목적 구성한 Task의 입력 흐름을 시작합니다.
- Command Palette에서 Tasks: Run Task를 실행하고 입력값 확인: 대상과 모드를 선택합니다.
입력 위치 Command Palette
Artifact Tasks: Run Task → 입력값 확인: 대상과 모드
정상 결과 실행 대상을 입력하세요 (민감정보 금지) 입력 상자가 나타납니다.
확인 질문 문구와 기본값 sample-one을 확인합니다.
실패 신호 Task가 목록에 없거나 질문 없이 Terminal이 열립니다.
6. 첫 대상 이름 입력하기
목적 promptString이 실행 시 값을 받는지 확인합니다.
- 입력 상자의 값을
sample-one으로 두고 Enter를 누릅니다.
입력 위치 VS Code Quick Input
Artifact 비민감 문자열 sample-one
정상 결과 실행 모드를 선택하세요 목록이 나타납니다.
확인 목록에 미리 보기와 일반 실행이 보이는지 확인합니다.
실패 신호 입력 후 Task가 취소되거나 목록이 비어 있습니다.
runMode input과 참조를 확인하고 STEP-05로 돌아갑니다.7. 첫 실행 모드 선택하기
목적 pickString의 label과 전달 value를 구분합니다.
- 미리 보기를 선택합니다.
입력 위치 VS Code Quick Pick
화면 label: 미리 보기
전달 value: dry-run
정상 결과 Task Terminal에대상: sample-one과모드: dry-run이 출력됩니다.
확인 화면 label이 아니라 value dry-run이 출력됐는지 확인합니다.
실패 신호 미리 보기가 그대로 출력되거나 환경 변수 값이 비어 있습니다.
label·value와 options.env 키를 확인하고 STEP-05로 돌아갑니다.8. 같은 Task를 다시 시작하기
목적 Task 복사 없이 값을 다시 받을 수 있는지 확인합니다.
- Tasks: Run Task에서 같은 입력값 확인: 대상과 모드를 다시 선택합니다.
입력 위치 Command Palette
Artifact 같은 Task label
정상 결과 대상 입력 상자가 다시 나타납니다.
확인 새 Task 항목을 만들지 않았는데 입력 흐름이 다시 시작되는지 확인합니다.
실패 신호 이전 값으로 질문 없이 실행됩니다.
9. 두 번째 대상 이름 입력하기
목적 promptString 값 변경이 같은 Task에 반영되는지 확인합니다.
- 입력 상자에
sample-two를 입력하고 Enter를 누릅니다.
입력 위치 VS Code Quick Input
Artifact 비민감 문자열 sample-two
정상 결과 실행 모드 선택 목록이 나타납니다.
확인 입력 상자를 닫지 않고 선택 목록으로 진행했는지 확인합니다.
실패 신호 Task가 취소되거나 이전 Terminal 출력만 남습니다.
10. 두 번째 실행 모드 선택하기
목적 다른 pickString value가 출력에 반영되는지 확인합니다.
- 일반 실행을 선택합니다.
입력 위치 VS Code Quick Pick
화면 label: 일반 실행
전달 value: normal
정상 결과 Task Terminal에대상: sample-two와모드: normal이 출력됩니다.
확인 첫 실행의 두 값과 두 번째 실행의 두 값이 모두 다르게 보이는지 비교합니다.
실패 신호 sample-one 또는 dry-run이 다시 출력됩니다.
default와 실제 선택을 구분합니다. 되돌리기: STEP-08부터 다시 실행합니다.11. 구성에 비밀값이 없는지 확인하기
목적 재사용 입력을 비밀 저장소로 오해하지 않게 합니다.
.vscode/tasks.json에서 암호·토큰·API 키 형태의 실제 literal이 없는지 검색합니다.
입력 위치 .vscode/tasks.json에서 Ctrl+F
Artifact 읽기 전용 파일 검색과 육안 검토
정상 결과 실제 자격 증명 문자열이 0개입니다.
확인 default, options, command, args, options.env 값을 교차 확인합니다.
실패 신호 실제 비밀값 또는 외부 전송 명령이 보입니다.
4. 완료 확인하기
입력 화면과 독립된 방법을 포함해 결과를 교차 확인합니다.
.vscode/tasks.json을 닫았다 다시 열어targetName,runModeID와 두 참조가 남아 있는지 확인합니다.- Tasks: Run Task로 첫 실행해
sample-one · dry-run출력을 확인합니다. - 같은 Task를 다시 실행해
sample-two · normal출력을 확인합니다. - Task 배열은 1개, input 배열은 2개이며 복제 Task가 없는지 확인합니다.
- 파일 검색과 육안 검토로 실제 민감정보 literal이 0개인지 확인합니다.
완료 기준 Task를 복제하지 않고 실행할 때마다 텍스트와 선택 값을 새로 받아 Terminal 출력이 바뀌며, 구성 파일에는 실제 민감정보가 없습니다.
5. 문제가 생겼다면
Task가 목록에 나타나지 않는다
먼저 확인 .vscode/tasks.json 경로, 저장 여부, Problems 탭의 JSON 오류를 보존하고 확인합니다.
복구 Workspace 루트 아래 경로와 쉼표·괄호를 수정한 뒤 저장합니다.
재합류 STEP-05
Variable input targetName can not be resolved처럼 input ID 오류가 난다
먼저 확인 Terminal 오류 원문을 보존하고 ${input:targetName}과 inputs[].id의 대소문자·철자를 비교합니다.
복구 두 위치를 같은 ID로 맞추고 중첩된 input 변수 형태를 제거합니다.
재합류 STEP-03
Quick Pick 기본값 오류 또는 기본 선택이 없다
먼저 확인 runMode input 전체와 JSON 진단을 보존하고, default가 label이 아니라 option value인지 확인합니다.
복구 default를 dry-run 또는 normal 중 하나로 바꿉니다.
재합류 STEP-05
Terminal의 대상 또는 모드가 비어 있다
먼저 확인 Terminal 두 줄 전체와 options.env 객체를 보존하고 환경 변수 키·input 참조 철자를 확인합니다.
복구 키를 예제와 맞추고 PowerShell 프로필을 확인합니다.
재합류 STEP-05
예상하지 못한 명령이 실행된다
먼저 확인 Task Terminal 전체 출력, 변경하지 않은 tasks.json, 실행 프로세스 이름을 보존합니다. 원인은 확인 전까지 UNKNOWN입니다.
복구 Tasks: Terminate Task로 중단하고 Workspace를 닫습니다. 원인을 확인하기 전에는 재실행하지 않습니다.
재합류 원인이 확인되고 보호 대상이 정상일 때만 STEP-04
6. 핵심 정리와 공식 자료
inputs의 고유 ID를${input:id}로 참조하면 같은 Task가 실행 시 값을 받을 수 있습니다.promptString은 자유 텍스트,pickString은 제한된 선택지를 받습니다.- label과 value를 나누면 화면 문구와 Task 전달값을 각각 안정적으로 관리할 수 있습니다.
- Task 변수 치환은
command,args,options에서 사용하고 input 중첩은 피합니다. password: true는 화면 마스킹일 뿐 비밀 관리 계약이 아닙니다. 실제 민감정보를 Task 구성에 저장하지 않습니다.
공식 자료
아래 자료는 2026-08-06 19:00 Asia/Seoul 기준으로 접근했습니다. 이 Run은 로컬 VS Code Stable 1.131.0 Windows x64를 확인했으며 후속 버전·UI 언어·셸에 따라 표시 이름과 동작 차이가 생길 수 있습니다. 보안 저장소에 관한 문장은 공식 Schema가 보장하는 범위가 입력 화면의 글자 숨김뿐이라는 점에 근거한 안전 측 추론입니다.
- Variables reference · Microsoft
- Integrate with External Tools via Tasks · Microsoft
- Appendix: Schema for tasks.json · Microsoft
- configurationResolverSchema.ts · microsoft/vscode
presentation.reveal, panel, group, clear로 여러 Task의 출력을 섞지 않고 확인하는 방법을 다룹니다.'개발 > Visual Studio Code' 카테고리의 다른 글
| 커맨드 팔레트 9부: VS Code Task 출력을 전용 Terminal로 정리하기 (0) | 2026.08.08 |
|---|---|
| VS Code Task 출력이 섞인다면? 전용 Terminal로 깔끔하게 정리하기 (0) | 2026.08.08 |
| 커맨드 팔레트 6부: VS Code 폴더를 열 때 Task 자동 실행하기 (0) | 2026.08.05 |
| VS Code 커맨드 팔레트 5부|Watch Task와 Background Problem Matcher (1) | 2026.08.05 |
| VS Code 커맨드 팔레트 4부|Task 오류를 Problems 패널로 연결하는 Problem Matcher (1) | 2026.08.03 |