粗大メモ置き場

個人用,たまーに来訪者を意識する雑記メモ

ROS2の開発用にWindows Terminalを使ってbash/Powershellのタブ生成時に特定のbatを実行させる話(bashrc的な)

まとめ

  • ROS2 みたいにターミナルを起動後に特定のコマンドを実行しておきたい場合の書き方のメモ
  • ショートカットやWindows Terminalの起動時オプションに特定の記述を書くことで起動時に特定のプロセスを走らせられる
  • 下記のような記法が使える

コマンドプロンプトの場合

# hogefuga.batを実行してそのまま開きっぱなしにする
cmd.exe /k "hogefuga.bat"

Powershellの場合

# cmd1とcmd2を実行してそのまま開きっぱなしにする
powershell.exe -NoExit -Command "cmd1.ps1;  cmd2.ps1"

事例:ROS2でターミナル起動毎に実行する内容

今回の作業目的です。 ROS1でのsource devel/setup.bashに相当する作業がROS2でも必要です。下記チュートリアルを参照。

docs.ros.org

call C:\dev\ros2\local_setup.bat
C:\opt\ros\galactic\x64\local_setup.ps1

上記コマンドをタブを開くたびに入力する必要があり面倒です。 (Powershellにはbashrcみたいなのがあるので実は不要ですが。)

他にもいろいろ設定する必要がありそう?な気がしますが,それは別の記事で検証します。
なんなら一つのファイルにまとめてからそれを実行すれば良いだけの気もしますしね。

補足: ROS2のインストール形式

ROS2のバイナリインストール時にはzipからではなく,aka.ms/rosに示されている手順でインストールしているため若干走らせているコマンドが異なる可能性があります。WindowsにWSLを経由せずにROS2を入れている人の母数が結構少ないのか情報が足りてないので分かり次第追記します。



Windows Terminalを用いた解決策

Windows TerminalはWSLやコマンドプロンプトPowershellなどをまとめて扱えるMS公式のターミナルアプリです。 ここに下図のように呼び出したいターミナルソフトとその起動コマンドを設定することができるため,いちいち実行するのが面倒なコマンドを起動時に処理することができます。

Windows Terminalの設定画面

新しいターミナルの登録手順

ここに新しくROS2用のコマンドプロンプト/Powershellのターミナル設定を登録します。

設定 -> 「新しいプロファイルの追加」から 「コマンドライン」 を使いたいターミナルソフトに応じて編集します。

コマンドプロンプトを用いる時の設定

コマンドプロンプトを用いる場合は下記のように登録すると良いです。(バージョンはgalacticの設定です)

cmd.exe /k "C:\opt\ros\galactic\x64\local_setup.bat"

/k の意味はbatファイルを実行後,プロセスをExitしないという意味です。

追記:その後なんやかんやあってfoxyに変更したのでコマンドは下記に変更しました。

cmd.exe /k "C:\opt\ros\foxy\x64\setup.bat && C:\opt\ros\foxy\x64\share\gazebo\setup.bat"

Powershellを用いるときの設定

Powershellでは下記のような記述を書くことによりROS2の設定を呼び出せます。

powershell.exe -NoExit -Command "C:\opt\ros\galactic\x64\local_setup.ps1"

なお,私はVisualStudioの設定も読ませた方がいいかなと思って下記を登録しています。長い...

powershell.exe -NoExit -Command "&{Import-Module """C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\Microsoft.VisualStudio.DevShell.dll"""; Enter-VsDevShell 595a88d4 -SkipAutomaticLocation -DevCmdArguments """-arch=x64 -host_arch=x64""";C:\opt\ros\galactic\x64\local_setup.ps1}"

補足:複数のコマンドを実行したい場合

複数のコマンドを実行する必要性が出た場合は下記のようにすると良いです。

参考にしたURLたち・免責

参考になったりならなかったりしたURLをおいておきます。
筆者が現時点でROS2の開発をフルにやっていないのでこれがおすすめ!とは言えないのであしからず。

windows — Linuxの.bashrcファイルに相当するウィンドウはありますか?

Safest way to run BAT file from Powershell script - Stack Overflow

Start-Process -FilePath """C:\opt\ros\galactic\x64\local_setup.ps1""" -Wait -NoNewWindow みたいな記法が書いてありましたが,これはちょっと期待していたのと動作が違ったのでパス。