-2

我的问题是对以下以非交互方式将参数传递给交互式程序的增强。

我正在使用一个脚本,它会要求我从列表中选择一个选项:

1 - ABC
2 - CDE
3 - EFG

我知道我应该根据字母选择哪个选项,但脚本希望提供一个数字。

有没有办法以非交互的方式做到这一点?我的意思是传递一个“参数”,它将根据给定的字母找到一个数字。

[编辑 1]

我看到我的描述不是很清楚,因此我添加了一个测试用例。我有一个脚本:test.sh. 它是交互式脚本,所以当我运行它时会提出问题:

./test.sh
Are you sure you want to run it? (y/n): y
Please choose option:
1 - ABC
2 - CDE
3 - EFG
1

要以非交互式方式运行此脚本,我正在使用:

echo "y
1" | test.sh

问题是,当我运行脚本时,我不知道为我想选择的选项分配了哪个数字。

4

2 回答 2

0

你的用例不是很清楚,但我猜你正在寻找什么可以用 grep 和 sed 来实现。

例子 :

cat choices.txt
1 - ABC
2 - CDE
3 - EFG

在choices.txt中找到EFG,然后sed得到数字(找到任意一组数字,只输出这组数字):

cat choices.txt | grep EFG | sed 's/^\([0-9]*\).*/\1/'
3
于 2017-11-08T10:25:34.563 回答
0

提出这个问题,我一直在寻找如何开始这项任务的任何提示。经过数小时的搜索后,我终于设法使用expect脚本实现了满足我要求的某物。

如果您对如何改进此脚本有任何想法,欢迎提出任何意见。

#!/usr/bin/expect -f

proc parse_output {search_in to_find} {
    set lines [split $search_in \n]
    foreach line $lines {
        if {[regexp "$to_find" $line]} {
            puts $line
            set i [string first "-" $line]
            set n [string range $line 0 [expr {$i-1}]]
            set nn [string trim $n]
            send -- "$nn\r"
        }
    }
}

set PARAM1 [lindex $argv 0]

spawn deploy
expect "?choose change to deploy:"
parse_output $expect_out(buffer) "$PARAM1\r"
expect "$" {send "\r"}
于 2017-11-14T07:33:17.420 回答