我想运行一个程序,该程序在执行后需要两个输入来决定如何运行。就像这样:
$ program <input_file>
Running program
1. Option one
2. Option two
select an option: <Expects `1` or `2`>
3. Option three
4. Option four
select an option: <Expects `3` or `4`>
Running with selected options.
我想对许多输入文件运行它,这些输入文件将选择相同的选项。现在我这样做:
$ for i in *; do program $i; done
这样,我必须为每个文件手动选择选项。我如何将选项传递给程序以使其自动化?例如:
$ for i in *; do program $i < <options>; done
如果未选择正确的选项,程序会重复可用的选项。因此,当我尝试时,{echo 2; echo 4}
它echo "2\n4\n"
卡在第一个选项选择上。
答案1
一个选项是 Elseif 所有内容
IF "%ID%"=="0" ( ... & ... & ... ) ELSE ^
IF "%ID%"=="1" ( ... ) ELSE ^
IF "%ID%"=="2" ( ... ) ELSE ^
REM default case...
第二种选择
echo Choose from the list given below:
echo [1] Option 1
echo [2] Option 2
echo [3] Option 3
set /a one=1
set /a two=2
set /a three=3
set /a four=4
set input=
set /p input= Enter your choice:
if %input% equ %one% goto Z if NOT goto Start2
if %input% equ %two% goto X if NOT goto Start2
if %input% equ %three% goto C if NOT goto Start2
if %input% geq %four% goto N
:Z
cls
echo You have selected : Option 1
set option=Option 1
echo %year%
call:branches option
pause
exit
来源
StackOverflow 线程他们对批处理和编程语言有更多的了解
答案2
当我尝试时
{echo 2; echo 4}
,echo "2\n4\n"
它卡在第一个选项选择上。
我不清楚你是如何尝试这个的,但是:
{echo 2; echo 4}
在语法上无效;你想要{ echo 2; echo 4; }
;echo "2\n4\n"
只需打印2\n4\n
; 你想要的echo -ne "2\n4\n"
(注意: 的各种实现echo
可能表现不同,但由于echo
是内置的bash
,并且你标记了狂欢,我认为您使用内置)。
我会说可能工作:
for i in *; do { echo 2; echo 4; } | program "$i"; done
我可以想象program
在它询问选项之前默默地耗尽并丢弃其 stdin,或者使用另一个技巧使上述解决方案失败。在这种情况下expect
,如果可用,请尝试。
man 1 expect
状态:
expect
是一个根据脚本与其他交互程序“对话”的程序。按照脚本,expect
知道程序可以做什么以及正确的响应应该是什么。[…]
一般来说,
expect
对于运行任何需要程序和用户之间交互的程序来说,它都很有用。唯一需要的是,交互可以通过编程来描述。
当程序要求它们时,此示例将发送2和4:
expect -c '
spawn program ./input_file
expect "2. Option two"
expect "select an option:*"
send "2\r"
expect "4. Option four"
expect "select an option:*"
send "4\r"
expect eof'
将其与 shell 变量一起使用需要正确的引用和转义:
for i in *; do
expect -c "
spawn program \"$i\"
expect \"2. Option two\"
expect \"select an option:*\"
send \"2\r\"
expect \"4. Option four\"
expect \"select an option:*\"
send \"4\r\"
expect eof"
done