LoginSignup
0
0

More than 1 year has passed since last update.

VSCode で Nyagos : タスクランエラーを回避する

Last updated at Posted at 2021-05-02

Visual Studio Code上で Windows Script Hostの動作チェックをしようとしてタスク実行でハマったのでメモ

ターミナルをNyagosに指定した状態で タスクを実行してみる。

Cofigure Taskのテンプレート Others で作られるサンプルタスク
Ctrl+Shift+b したらターミナルが開いて Hello してくれる(はず)

vscode\tasks.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",
            "problemMatcher": [],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}
  • 実行結果(エラー)
> Executing task: echo Hello <

/d: unknown parameter
/c: unknown parameter
echo: unknown parameter
Hello: unknown parameter
Nihongo Yet Another GOing Shell 4.4.9_4-windows-amd64 by go1.16
(c) 2014-2021 NYAOS.ORG <http://www.nyaos.org>
<MyPC:E:/tasktest>
$

問題点は二つ

謎のパラメータが追加されている。

> Executing task: echo Hello <

/d: unknown parameter
/c: unknown parameter

この /d/c は cmd.exe用のパラメータですね。tasks.jsonで "type": "shell" = cmd.exe って決め打ちでパラメータが付与されてるみたい。  
しかし起動されるのは"terminal.integrated.shell.windows"でユーザーが指定しているターミナルソフト=Nyagos なのでエラーになるということのようです。

Nyagosがコマンドを受け付けていない。

Nyagosにコマンドを渡すには-c-kを付与する必要がありますが、settings.jsonでパラメータを指定してもうまくいきません。

terminal.integrated.shell に直接パラメータを追加してみる(失敗)

パラメータごと " " でくくられてしまってるっぽい。

settings.json
"terminal.integrated.shell.windows": "\"${env:SCOOP}\\apps\\nyagos\\current\\nyagos.exe\" -c",
> Executing task: echo Hello <

ターミナル プロセスが起動に失敗しました: シェル実行可能ファイル ""d:\scoop\<User>\apps\nyagos\current\nyagos.exe" -c" へのパスが存在しません。

ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。

terminal.integrated.shellArgsにパラメータを追加してみる(失敗)

やっぱり cmd.exe用の/dが付与されている。

settings.json
    "terminal.integrated.shell.windows": "${env:SCOOP}\\apps\\nyagos\\current\\nyagos.exe",
    "terminal.integrated.shellArgs.windows": ["-c"],
> Executing task: echo Hello <

'/d' is not recognized as an internal or external command,
operable program or batch file

ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。

対策

対策といっても直接 exe実行でうまく行かないならバッチファイルなりWSHなり経由するしかないわけですが。そういえば みんな大好き cmderではどうしているのかと確認してみたら、パラメータのありなしでシェル振り分けられてました。

cmder\vendor\bin\vscode_init.cmd

IF [%1] == [] (
    REM -- manually opened console (Ctrl + Shift + `) --
    CALL "%~dp0..\init.bat"
) ELSE (
    REM -- task --
    CALL cmd %*
    exit
)

タスクの時は直接 cmd.exeを起動。タスク窓は実行したらすぐ閉じるわけだし、ノーマルな環境での動作確認という意味でもこれでいいのか。

結論

cmderの判定部分をまんまコピーして Nyagos起動部だけ書き換え。バッチファイルの保存場所はどこでもいいんだけど Scoop使いなので一応 persistフォルダに。

my_nyagos-vscode.bat
@echo off
IF [%1] == [] (
    REM -- manually opened console (Ctrl + Shift + `) --
    %SCOOP%\apps\nyagos\current\nyagos.exe
) ELSE (
    REM -- task --
    CALL cmd %*
    exit
)
setting.json
"terminal.integrated.shell.windows": "${env:SCOOP}\\persist\\nyagos\\my_nyagos-vscode.bat",

動作確認

  • タスク実行 ctrl+shift+b
  > Executing task: echo Hello <

  Hello

  ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。

  • 手動でターミナル起動 ctrl+shift+@
Nihongo Yet Another GOing Shell 4.4.9_4-windows-amd64 by go1.16
  (c) 2014-2021 NYAOS.ORG <http://www.nyaos.org>
<MyPC:E:/tasktest>
  $ 

うまく行った

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0