从cmd.exe使用cygwin

时间:2014-11-22 15:50:53

标签: windows cmd

是否可以在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活动中使用这一个命令,因此在运行命令时不应该有任何类型的用户交互

1 个答案:

答案 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,如果你还没有重新映射我们的根驱动器)。