运行 一次点击多次使用不同的参数

Run the application multiple times with different arguments in one click

我想做的是 运行 在 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),它只会 运行 每个后续命令。我认为您打算使用分号 ;,无论上一个命令如何退出,每个命令都会 运行。

./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

仅供参考 -- 我添加了反斜线续行符以使示例可读。您将此命令全部放在一行中(只需删除反斜杠)

Shell Cygwin 脚本

将以下内容放入文件中,比如 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 以非零退出状态返回,则在此处调用它(这就是 || 所做的;它是 && 的或s 和).

然后:

chmod +x bulkssltest.sh

然后:

./bulkssltest.sh -p STATIC_PORT STATIC_IP

或者,对于纯 Windows:

不幸的是,在批处理文件中循环是痛苦的,快捷方式也是如此,而且我还没有找到一种方法来将空标记扩展为空标记,就像我在上面的 shell 脚本中所做的那样,所以产生与您发布的表达式一样的精确结果,您必须自己重复一遍。例如,将其放入文件 bulkssltest.bat:

@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 中的 $? scripts),:end是跳转标签。

如果您想使用板载 Windows 工具做更复杂的事情,我建议您研究一下电源 shell。批处理文件并没有改善。