Windows バッチ スクリプトで複数のシェル コマンドを次々に実行するにはどうすればよいですか?

Windows バッチ スクリプトで複数のシェル コマンドを次々に実行するにはどうすればよいですか?

'&'同様の投稿のほとんどが示唆しているように使用してみましたが、これは機能しません:

@echo off
call variables.bat // contains port numbers and notebook address
ssh user@remote_server "jupyter notebook --no-browser --port=%port_r%" & 
ssh -N -f -L localhost:%port_l%:localhost:%port_r% user@remote_server &
start chrome %notebook_address% 
@PAUSE

基本的に、jupyter ノートブックをリモートで実行して接続できる 2 つのシェル スクリプトがあります。これらを手動で次々に実行し、1 つのスクリプトに組み合わせたいと考えています。

最初のコマンドは、リモート サーバー上で Jupyter Notebook を実行します。

@echo off 
call variables.bat  // contains port numbers and notebook address
ssh user@remote_server "jupyter notebook --no-browser --port=%port_r%" 
@PAUSE

2 番目はポート転送を提供します:

@echo off
call variables.bat
ssh -N -f -L localhost:%port_l%:localhost:%port_r% user@remote_server
@PAUSE

どうすればこの2つを組み合わせることができるでしょうか?

答え1

Windows のコマンドライン シェルは Bash ではなく、Cmd.exe (「バッチ」と呼ばれることもあります) です。

両方のコマンドを実行したい場合同時に、それは確かに&Bash ではそうなるのですが、Cmd では「バックグラウンド」効果がなく、単に 2 つのコマンドを別々の行に次々に並べるのとまったく同じことを行うだけです。

何かを並列に実行するには、おそらくstartここでも使用できます:

@echo off
call variables.bat
start ssh user@remote_server "jupyter notebook --no-browser --port=%port_r%"
start ssh -N -f -L localhost:%port_l%:localhost:%port_r% user@remote_server
start chrome %notebook_address% 
pause

ただし、2 つのssh接続に関しては、それらを 1 つに組み合わせることができない理由がわかりません (つまり、 を使用する代わりに、実際のコマンドを呼び出して同時に転送を設定するだけです-N)。

@echo off
call variables.bat
start ssh -f -L localhost:%port_l%:localhost:%port_r% user@remote_server "jupyter notebook --no-browser --port=%port_r%"
start chrome %notebook_address% 
pause

関連情報