运行 一次点击多次使用不同的参数
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。批处理文件并没有改善。
我想做的是 运行 在 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。批处理文件并没有改善。