使用 Plink 将批处理文件中的多个参数传递到远程 shell 脚本时出现问题
Issue in passing multiple parameters in Batch file to remote shell script using Plink
我是 运行 来自 windows 命令行的 bat 文件,它调用 linux 脚本来复制文件:
WIN_BATCH.bat内容:
"C:\plink.exe" -ssh User@%1 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh %1"
LINUX_COPY_SCRIPT内容如下:
sshpass -p "pass123" scp /u01/file_1.txt root@:/u01/file_1_Copy.txt
当我从 Win cmd 如下 运行 命令时,一切正常,即
Win 命令提示符:
C:\Scripts>WINbatch.bat 11.111.11.11
CMD 中的消息:
C:\Scripts>"C:\plink.exe" -ssh User@11.111.11.11 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh 11.111.11.11"
C:\Scripts>
文件从 "file_1.txt" 复制到 "file_1_Copy.txt"
现在问题来了,如果我修改我的脚本如下:
WIN_BATCH.bat内容:
"C:\plink.exe" -ssh User@%1 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh %2"
LINUX_COPY_SCRIPT内容如下:
sshpass -p "pass123" scp /u01/file_1.txt root@:/u01/file_1_Copy.txt
并传递 2 个参数:
Win 命令提示符:
C:\Scripts>WINbatch.bat 11.111.11.11 11.111.11.11
我遇到错误:
C:\Scripts>"C:\plink.exe" -ssh User@11.111.11.11 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh 11.111.11.11"
ssh: Could not resolve hostname : Name or service not known
lost connection
C:\Scripts>
为什么??如果您看到两种情况下触发的命令相同,因为我传递了相同的参数。
我怎样才能让它工作?传递多个参数的想法是因为我想在后期将文件从一个环境复制到另一个环境。
即一次
C:\Scripts>WINbatch.bat 11.111.11.11 11.111.11.11
在工作我会在
C:\Scripts>WINbatch.bat 11.111.11.11 11.111.11.12
其中“11.111.11.11”和“11.111.11.12”是2个系统的ip。
您只向 LINUX_COPY_SCRIPT.sh
传递了一个参数:
"C:\plink.exe" -ssh User@%1 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh %2"
但是您正试图在 shell 脚本中使用第二个参数 (</code>):</p>
<pre><code>sshpass -p "pass123" scp /u01/file_1.txt root@:/u01/file_1_Copy.txt
应该是</code>:</p>
<pre><code>sshpass -p "pass123" scp /u01/file_1.txt root@:/u01/file_1_Copy.txt
我是 运行 来自 windows 命令行的 bat 文件,它调用 linux 脚本来复制文件:
WIN_BATCH.bat内容:
"C:\plink.exe" -ssh User@%1 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh %1"
LINUX_COPY_SCRIPT内容如下:
sshpass -p "pass123" scp /u01/file_1.txt root@:/u01/file_1_Copy.txt
当我从 Win cmd 如下 运行 命令时,一切正常,即
Win 命令提示符:
C:\Scripts>WINbatch.bat 11.111.11.11
CMD 中的消息:
C:\Scripts>"C:\plink.exe" -ssh User@11.111.11.11 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh 11.111.11.11"
C:\Scripts>
文件从 "file_1.txt" 复制到 "file_1_Copy.txt"
现在问题来了,如果我修改我的脚本如下:
WIN_BATCH.bat内容:
"C:\plink.exe" -ssh User@%1 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh %2"
LINUX_COPY_SCRIPT内容如下:
sshpass -p "pass123" scp /u01/file_1.txt root@:/u01/file_1_Copy.txt
并传递 2 个参数:
Win 命令提示符:
C:\Scripts>WINbatch.bat 11.111.11.11 11.111.11.11
我遇到错误:
C:\Scripts>"C:\plink.exe" -ssh User@11.111.11.11 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh 11.111.11.11"
ssh: Could not resolve hostname : Name or service not known
lost connection
C:\Scripts>
为什么??如果您看到两种情况下触发的命令相同,因为我传递了相同的参数。
我怎样才能让它工作?传递多个参数的想法是因为我想在后期将文件从一个环境复制到另一个环境。
即一次
C:\Scripts>WINbatch.bat 11.111.11.11 11.111.11.11
在工作我会在
C:\Scripts>WINbatch.bat 11.111.11.11 11.111.11.12
其中“11.111.11.11”和“11.111.11.12”是2个系统的ip。
您只向 LINUX_COPY_SCRIPT.sh
传递了一个参数:
"C:\plink.exe" -ssh User@%1 -pw "pass123" "/u01/./LINUX_COPY_SCRIPT.sh %2"
但是您正试图在 shell 脚本中使用第二个参数 (</code>):</p>
<pre><code>sshpass -p "pass123" scp /u01/file_1.txt root@:/u01/file_1_Copy.txt
应该是</code>:</p>
<pre><code>sshpass -p "pass123" scp /u01/file_1.txt root@:/u01/file_1_Copy.txt