¿Cómo ejecutar varios comandos de shell uno tras otro en un script por lotes de Windows?

¿Cómo ejecutar varios comandos de shell uno tras otro en un script por lotes de Windows?

Intenté usar '&'como sugieren la mayoría de publicaciones similares, pero esto no funciona:

@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

Básicamente tengo dos scripts de shell que me permiten ejecutar jupyter notebook de forma remota y conectarme a él. Los ejecuto manualmente uno tras otro y quiero combinarlos en un solo script.

El primero ejecuta jupyter notebook en un servidor remoto:

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

El segundo proporciona reenvío de puertos:

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

¿Cómo podría combinar los dos?

Respuesta1

El shell de línea de comandos de Windows no es Bash, sino Cmd.exe, a veces denominado "batch".

Si desea ejecutar ambos comandossimultáneamente, entonces estaría &en Bash, pero en Cmd eso no tiene el efecto de "fondo"; solo hace exactamente lo mismo que poner los dos comandos uno tras otro en líneas separadas.

startPara ejecutar algo en paralelo, lo más probable es que también puedas usar aquí:

@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

Aunque con respecto a las dos sshconexiones, no veo por qué no se pueden combinar en una (es decir, simplemente invocar el comando real y configurar el reenvío al mismo tiempo, en lugar de usar -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

información relacionada