es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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 comando set /p en lugar de ECHO para los comandos que requieren entrada del usuario. El comando set /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:

    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
        set /p answer="Presione Y para confirmar: "
        ECHO %answer%
        TIMEOUT /t 1 > nul
        ECHO exit
    ) | plink -ssh 192.168.1.20 -l root -pw ***
    

    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 manualmente Y. Hay que tener en cuenta que la entrada del usuario se almacena en la variable answer, 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:

    (
        TIMEOUT /t 1 > nul
        ECHO cd /
        ECHO cd usr
        ECHO cd bin
        ECHO cd core
        ECHO cd test
        TIMEOUT /t 1 > nul
        set /p dummy=""
        ECHO exit
    ) | plink -ssh 192.168.1.20 -l root -pw ***
    

    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.

Comments are closed.