正在运行的程序中的选项脚本选择

正在运行的程序中的选项脚本选择

我想运行一个程序,该程序在执行后需要两个输入来决定如何运行。就像这样:

$ 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

相关内容