💭
VSCode Remote SSHで別Shellからファイルを開く
VS CodeでのRemote Developmentは便利ですね。
私の現在の開発環境はこうなっています。
- Windows上のVirtualBoxでUbuntuをheadless modeで立ち上げ
- Windows Terminalからssh
- Windows上のVSCodeからRemote SSHでつないで開発
このような環境では、SSHで入っているShellから、VSCode上でファイルを開きたいことが多々あります。
VSCodeのTerminalからだと code
コマンドで開くことができるのですが、別Shellからでは使えません。
そこでこのようなscriptを用意し、日々使っています。
#!/usr/bin/env bash
CLI=`ls -t /run/user/$UID/vscode-ipc-* | head -n 1`
export VSCODE_IPC_HOOK_CLI=${CLI}
EXE=`ls -t ~/.vscode-server/bin/*/bin/code | head -1`
${EXE} $*
例えば remote_code.sh
というファイル名をつけておき、 remote_code.sh ~/bin/remote_code.sh
と開きたいファイルを引数に渡せば、
現在開いているVSCodeのRemote SSH上で指定したファイルを開けます。
注意点としては、以下の2点です。
- Remote Connectionがないと開かない (あたりまえ)
- Remote Connection起動後2,3秒待つ必要がある
解説
Remote SSHでは、入った先の環境の ~/.vscode-server/bin/
以下に実行用ファイルがコピーされます。しかし、別シェル上で素直に実行すると
Command is only available in WSL or inside a Visual Studio Code terminal.
と怒られます。これは、VSCode側との通信に VSCODE_IPC_HOOK_CLI
で指定されたsocketファイルを使っていて、この環境変数がないと怒られる、というわけです。
~/.vscode-server/bin/
やsocketファイルはバージョンごとに複数存在していて、 ls -t
で一番新しいファイルを選んでいます。
Discussion