【VSCode】ターミナル起動時に渡されるコマンドを確認する
更新日:2023/02/06
VSCodeはターミナル起動時のオプション等を"arg"プロパティ等で指定できます。
しかし、setting.json や tasks.json など複数の設定がまじりあい、その結果オプション不正などでエラーになることがあります。
そこで今回は、VSCodeがどのようなコマンドでターミナルを起動しているのか確認する方法をお伝えします。
終了コード1 で終了させる
新しいターミナルを開いたとき、ターミナルが0以外で終了するとエラーメッセージが表示されます。
このとき、VSCodeがターミナル起動のために実行したコマンドが確認できます。
次のコードは、【VSCode】ターミナルで文字化けした時の対処法で紹介した設定例の一部です。
setting.json
"terminal.integrated.profiles.windows": {
"PowerShell": {
"source": "PowerShell",
"icon": "terminal-powershell",
"args": ["-NoExit","-Command","$PSDefaultParameterValues['*:Encoding'] = 'utf8';"]
},
この設定を、ターミナル起動直後に exit 1で終了するように変更します。
"args": ["-NoExit","-Command","exit 1;$PSDefaultParameterValues['*:Encoding'] = 'utf8';"]
コマンドの最初に入れているのは、後に続くコマンドがエラーでも確認できるからです。
今回はWindowsのPowerShellなのでこのような記述になりますが、他のターミナルプログラムはそれぞれ仕様を調べてください。
ターミナルを新規で開くと、次のようなメッセージが表示されます。
これを見れば、どのようなコマンドが実行されたのかわかりますね。
タスクのコマンドを確認
前項の setting.json で、次のタスクを実行してみます。
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "echo Hello",
}
]
}
setting.jsonは exit 1 を入れていない状態です。
次のようなエラーが表示されます。
実行するタスク: echo Hello
-Command : 用語 '-Command' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前が正しく記述されているこ
とを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してください。
発生場所 行:1 文字:51
+ $PSDefaultParameterValues['*:Encoding'] = 'utf8'; -Command echo Hello
+ ~~~~~~~~
+ CategoryInfo : ObjectNotFound: (-Command:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
なんとなくわかりますが、実行したコマンドの詳細が不明なので問題を把握できません。
exit 1を入れて、実行してみます。
最初のコマンドで終了するので、後に続くコマンドは評価されません。
そのため、エラーが発生しません。
そして、終了コードが0以外のときは次のようなメッセージが表示されます。
実行するタスク: echo Hello
* ターミナル プロセス "C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -Command exit 1;$PSDefaultParameterValues['*:Encoding'] = 'utf8'; -Command echo Hello" が終了コード 1 で終了しました。
* ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
メッセージを見ると、-Command が2回使用されていますね。
2回目の -Command はプログラム名と判断され、そのようなプログラムがないためにエラーになったようです。
それによく考えると、タスクはコマンドが終了したらターミナルも終了するのが前提です。
終了しないと、タスクがいつまでたっても終わらないことになります。
-NoExit は、ターミナルを終了させないオプションなので、この点も正しくないですね。
ということで、実行したコマンドが把握できると問題を解決しやすくなります。
terminal.integrated.profilesの"arg"でコマンドを指定するときは、タスクやデバッグ時のターミナルを指定するterminal.integrated.automationProfileを別途定義します。
"terminal.integrated.automationProfile.windows": {
"path": "実行プログラムのパス",
"args": [],
"icon": "terminal-powershell"
},
更新日:2023/02/06
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。