我正在嘗試撰寫一個批處理檔案以在 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命令后我都會得到一個額外的換行符。
uj5u.com熱心網友回復:
當您plink在其命令列上沒有任何命令的情況下執行時,plink啟動互動式終端會話。這有很多不需要的副作用。包括你面對的那些。
將-Tswitchplink添加到命令列以避免:
(
...
) | plink -T -ssh 192.168.1.20 -l root -pw ***
另一種選擇是在服務器端執行所有操作并在plink命令列上指定完整命令(在這種情況下,您還需要添加-batchswitch):
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%)"
或者這兩種方法的某種組合。
類似問題:
- Windows 批處理腳本:SSH with Plink 在輸出中顯示奇怪的序列
- 使用 Plink 執行命令不起作用,但在 PuTTY 中執行
- .bat 中通過 Plink 的腳本行為不同
uj5u.com熱心網友回復:
批處理檔案echo使用 Windows 行結尾(回車 換行)。
將換行符與無行結束符結合起來:
@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
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/383449.html
下一篇:批處理檔案注冊查詢
