是否可以在Windows中使用cmd.exe中的cygwin?
我想做以下
FOR /L %G in (1 1 100) DO sshpass -p "password" scp E:\in\File%G.csv openstack@remotecomp:/testfiles/
将100个文件从Windows传输到unix计算机
现在提问:
只要安装了cygwin,我可以使用cmd.exe中的sshpass和scp吗?还是我必须使用cygwin终端?
并且我想要传输的文件必须在cygwin的文件夹中吗?
目标是在BPEL活动中使用这一个命令,因此在运行命令时不应该有任何类型的用户交互
答案 0 :(得分:0)
您可以使用二进制文件的完整路径,或创建一个包装器脚本并调用它来执行cygwin命令,例如。
#!/bin/bash
# doit.sh wrapper script in home dir of cygwin user
echo "got args $@"
并使用
从Windows shell调用它for /L %G in (1 1 100) DO c:\cygwin\bin\bash --login -c "/home/youruser/doit.sh %G"
在这种情况下它输出1..100,但你的包装脚本可以代替所需的所有ssh东西。
对于更复杂的脚本,您可以将params从windows传递到shell脚本,如下所示:
#!/bin/bash
# callssh.sh
COUNT_NUM=$1
PASSWORD=$2
FILE_PATH=$(cygpath $3)
sshpass -p $PASSWORD scp $FILE_PATH openstack@whereever:/some/path/
,您可以使用
进行调用for /L %G in (1 1 100) DO c:\cygwin\bin\bash --login -c "/home/youruser/callssh.sh %G your_password E:/in/File%G.csv"
请注意使用cygpath将Windows路径样式转换为cygwin能够理解的内容。 SSH可执行文件是一个cygwin进程,因此您需要转换为可以使用的东西。
另外,请注意从反斜杠到正斜杠的变化,再次针对windows和cygwin之间的路径分隔符中的一些怪癖。
如果您遇到此问题(我无法直接为您测试代码),请在cygwin shell上执行此操作:
cygpath E:/path/to/file
然后检查输出类似/ e / path / to / file(或/ cygpath / e / path / to / file,如果你还没有重新映射我们的根驱动器)。