Agregar una entrada a Plink en un archivo por lotes de Windows genera saltos de línea adicionales.
Estoy tratando de escribir un archivo por lotes para ejecutar en Windows 10 Pro que use Plink para establecer una sesión SSH en un servidor remoto y ejecutar algunos comandos. Todo funciona bien, excepto que por alguna razón obtengo espacios adicionales con cada comando ECHO
que ingreso. Normalmente, esto no es un problema, hasta que el comando que estoy ejecutando requiere una respuesta específica del usuario, es decir, presionar Y
para confirmar una acción. Debido a que recibe el espacio adicional después de probar el comando STSTest
y antes de recibir el carácter Y
, se produce un error.
Aquí está mi script por lotes:
set PATH=C:\Program Files\PuTTY;%PATH%
set TestNum=%1
(
TIMEOUT /t 1 > nul
ECHO cd /usr/bin/core/test
ECHO rm STS_*.txt
ECHO rm STS_T1_Test%TestNum%.txt
ECHO ./STSTest --T 2 --i %TestNum%
TIMEOUT /t 1 > nul
ECHO Y
TIMEOUT /t 1 > nul
ECHO exit
) | plink -ssh 192.168.1.20 -l root -pw ***
¿Alguien tiene alguna idea de cómo eliminar ese espacio adicional para que Y
se ingrese en el orden correcto después de que se ingrese el comando STSTest
?
Aquí hay un ejemplo más simple que demuestra con lo que estoy luchando. Si defino este archivo por lotes simple:
(
TIMEOUT /t 1 > nul
ECHO cd /
ECHO cd usr
ECHO cd bin
ECHO cd core
ECHO cd test
TIMEOUT /t 1 > nul
ECHO exit
) | plink -ssh 192.168.1.20 -l root -pw ***
Los resultados en la ventana de comandos se ven así:
Last login: Wed Jul 29 23:53:30 2020 from 192.168.1.7
root@core-A:~# cd /
root@core-A:/#
root@core-A:/# cd usr
root@core-A:/usr#
root@core-A:/usr# cd bin
root@core-A:/usr/bin#
root@core-A:/usr/bin# cd core
root@core-A:/usr/bin/core#
root@core-A:/usr/bin/core# cd test
root@core-A:/usr/bin/core/test#
root@core-A:/usr/bin/core/test# exit
Obtengo un espacio adicional después de cada comando ECHO
.
davy.ai
Para eliminar las líneas adicionales después de cada comando
ECHO
en un archivo por lotes que ejecuta Plink para establecer una sesión SSH en un servidor remoto, se puede intentar usar el comandoset /p
en lugar deECHO
para los comandos que requieren entrada del usuario. El comandoset /p
espera una entrada del usuario y no agrega automáticamente un salto de línea.Por ejemplo, modifique el script por lotes original de la siguiente manera:
Esto debería evitar que Plink envíe automáticamente un salto de línea adicional después del comando
STSTest
y esperar a que el usuario ingrese manualmenteY
. Hay que tener en cuenta que la entrada del usuario se almacena en la variableanswer
, que luego se muestra por pantalla a través de Plink.Para el ejemplo más simple, modifique el archivo por lotes de la siguiente manera:
En este caso, simplemente utilizamos
set /p
para esperar cualquier entrada del usuario antes de salir de la sesión.Es importante destacar que en ambos casos, es posible que se requiera una verificación adicional de errores para garantizar que la entrada del usuario sea correcta antes de continuar con el script.