我尝试做的是在Cygwin
中多次运行相同的程序,但传递了不同的参数。
我尝试做的事情如下
./ssltest.exe -3 -p STATIC_PORT STATIC_IP && ./ssltest.exe -p STATIC_PORT STATIC_IP && ./ssltest.exe -1 -p STATIC_PORT STATIC_IP && ./ssltest.exe -2 -p STATIC_PORT STATIC_IP
但是看起来像这样的东西
./bulkssltest.exe -p STATIC_PORT STATIC_IP
并呈现相同的结果。如您所见,端口和IP保持不变,但我使用-1
,-2
,-3
并且没有其他参数运行它。
代码对我来说太复杂了,无法编辑它以达到相同的效果,但我很确定有办法让它以某种方式工作。
任何意见都会受到赞赏。
答案 0 :(得分:0)
&符运算符控制命令管道。如果前一个命令完成OK,它将只运行每个后续命令(即:返回0)。我认为您打算使用分号;
,它将运行每个命令,无论前一个命令如何退出。
./ssltest.exe -3 -p STATIC_PORT STATIC_IP ; \
./ssltest.exe -p STATIC_PORT STATIC_IP ; \
./ssltest.exe -1 -p STATIC_PORT STATIC_IP ; \
./ssltest.exe -2 -p STATIC_PORT STATIC_IP
仅供参考 - 我添加了反斜杠行延续字符以使示例可读。您将此命令全部放在一行(只需删除反斜杠)
答案 1 :(得分:0)
将以下内容放入文件中,例如bulkssltest.sh
:
#!/bin/sh
for opt in -3 "" -1 -2; do
# Intentionally unquoted $opt here, so that the empty opt disappears
# and is not expanded into the empty string (that ssltest doesn't expect)
# You might want to use an absolute path to ssltest.exe here.
./ssltest.exe $opt "$@" || break
done
确保该文件包含UNIX行结尾或/bin/sh
会抱怨$\r: command not found.
及类似内容。这里的诀窍是"$@"
扩展到传递给脚本的参数,并且稍微不同寻常地使用循环变量$opt
使其在空字符串时消失。 break
退出循环,如果ssltest
返回非零退出状态(||
执行的操作; &&
'或chmod +x bulkssltest.sh
',则会调用此处s和)。
然后:
./bulkssltest.sh -p STATIC_PORT STATIC_IP
然后:
bulkssltest.bat
不幸的是,在批处理文件中循环是很麻烦的,就像快捷方式一样,我还没有找到一种方法将空标记扩展到我在上面的shell脚本中所做的任何事情,所以要产生精确的结果作为你发布的表达方式,你必须重复自己。例如,将其放入文件@echo off
ssltest -3 %*
IF NOT %ErrorLevel% EQU 0 GOTO end
ssltest %*
IF NOT %ErrorLevel% EQU 0 GOTO end
FOR %%O IN (-2,-1) DO (ssltest %%O %* & IF NOT %ErrorLevel% EQU 0 GOTO end)
:end
:
bulkssltest -p STATIC_PORT STATIC_IP
并运行
FOR
此处包含ssltest
循环以用于说明目的;当然,你可以像前两个一样对cmd
进行最后两次调用。请注意,您不能将此循环分成几行; -3
不会拥有它。如果执行顺序无关紧要,您可以将%*
的调用折叠到循环中并保存一些行,但我认为空令牌不可能。这里%ErrorLevel
扩展为批处理文件的参数,$?
是最近执行的程序的退出状态(类似于shell脚本中的:end
),并且{{1}}是跳转标签。
如果你想使用板载Windows工具做更复杂的事情,我建议你研究一下powershell。批处理文件没有任何改善。