我要做的是在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/