我要做的是在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运行它,并且没有附加参数。
代码太复杂了,我无法编辑它来获得相同的结果,但我很确定有一种方法可以让它像这样工作。
如有任何意见,将不胜感激。

最佳答案

Cygwin的Shell脚本
将以下内容放入文件中,例如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以非零退出状态返回(这就是||,它是OR to &&和)。
然后:
chmod +x bulkssltest.sh

然后:
./bulkssltest.sh -p STATIC_PORT STATIC_IP

或者,对于纯窗口:
不幸的是,批处理文件中的循环是痛苦的,就像快捷方式一样,而且我还没有找到像上面的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

这里包含bulkssltest.bat循环是为了演示;当然,您可以像前两个一样对FOR执行最后两个调用。请注意,不能将此循环分成几行;ssltest将没有它。如果执行顺序无关紧要,您可以将带有cmd的调用折叠到循环中并保存一些行,但我认为对于空令牌,这是不可能的。这里是-3扩展到批处理文件的参数,%*是最近执行的程序的退出状态(类似于shell脚本中的%ErrorLevel),$?是跳转标签。
如果你想用车载Windows工具做更复杂的事情,我建议你去看看powershell。批处理文件并没有任何改善。

关于c - 一键使用不同的参数多次运行该应用程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28219434/

10-11 21:54