在 Windows 批处理文件中通过管道将输入输入到 Plink 中会添加额外的换行符

问题描述 投票:0回答:3

我正在尝试编写一个在 Windows 10 Pro 中运行的批处理文件,该文件将使用 Plink 建立到远程服务器的 SSH 会话并执行一些命令。 一切正常,除了无论出于何种原因,我最终都会在输入的每个

ECHO
命令中产生额外的换行符。通常,这不是问题,直到我运行的命令需要一些特定的用户反馈,即按
Y
确认操作。 由于它在测试
STSTest
命令之后和接收
Y
字符之前收到额外的换行符,因此它会引发错误。

这是我的批处理脚本:

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 ***

有人知道如何消除额外的换行以便在输入

Y
命令后以正确的顺序输入
STSTest
吗?


这是一个更简单的例子,展示了我正在对抗的内容。 如果我定义这个简单的批处理文件:

(
    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 ***

命令窗口的结果如下所示:

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

每个

ECHO
命令后我都会得到一个额外的换行符。

windows batch-file ssh putty plink
3个回答
1
投票

当您在命令行上没有任何命令的情况下执行

plink
时,
plink
会启动一个 interactive 终端会话。这有很多不需要的副作用。包括你所面对的人。

添加

-T
切换到
plink
命令行
以避免这种情况:

(
...
) | plink -T -ssh 192.168.1.20 -l root -pw ***

另一个选项是在服务器端执行所有操作,并在

plink
命令行上指定完整命令(在这种情况下,您还需要添加
-batch
开关
):

plink -ssh 192.168.1.20 -l root -pw *** -batch "cd /usr/bin/core/test && rm STS_*.txt && rm STS_T1_Test%TestNum%.txt && (echo Y | ./STSTest --T 2 --i %TestNum%)"

或者这两种方法的某种组合。


类似问题:


0
投票

批处理文件

echo
使用Windows换行符(回车+换行)。

newline hack 与 no lineending hack 结合起来:

@echo off
REM don't remove blank lines below
set NLM=^


set NL=^^^%NLM%%NLM%^%NLM%%NLM%

(
    <nul set /P=foo%NL%
    <nul set /P=foo%NL%bar%NL%
) > test.txt

并且 test.txt 变为(十六进制输出)

66 6F 6F 0A 66 6F 6F 0A 62 61 72 0A     foo.foo.bar.

0
投票

如果有人正在寻找使用 Powershell 的 plink 附加远程文件并排除回车的解决方案

&$plink -ssh -agent -batch $sender echo $string '| T 恤 -a' $destination

© www.soinside.com 2019 - 2024. All rights reserved.