Shell - 在两个模式之间执行外部文件中的命令

Shell - Execute commands in external file between two patterns

我有一个问题。我应该如何继续并使此代码打印出来并执行我在外部文件中的 curl 示例?

我希望它如何工作是匹配模式,在模式之间获取文本(没有模式)然后执行它。

有办法吗?

感谢您的帮助。

read -p "Enter a word: " instance
testfile=test.txt

case $instance in 
    loresipsum) 
        sed -n '/^loremipsum1/,${p;/^loremipsum2/q}' $testfile \
        |   while read -r line; do
            makingcurlCall=$(eval "$line") 
            echo "makingcurlCall" 
            done < $testfile ;;
         
    foobar)
        sed -n '/^foobar1/,${p;/^foobar2/q}' $testfile \
        |   while read -r line; do
            makingcurlCall=$(eval "$line") 
            echo "makingcurlCall" 
            done < $testfile ;; 
    *)
    printf 'No match for "%s"\n' ":instance" 
esac  

文本文件看起来像这样

loremipsum1

curl example1
curl example2
curl example3


loremipsum2



foobar1

curl foo
curl bar
curl foo

foobar2

您不能同时从 sed 的输出和直接从文件中读取 while 循环。您当前的代码忽略 sed 的输出并直接从文件中读取。也许像这样重构它:

#!/bin/sh
instance=${1-loresipsum}
testfile=test.txt

case $instance in
loresipsum) sed -n '/^loremipsum1/,/^loremipsum2/p' "$testfile";;
    foobar) sed -n '/^foobar1/,/^foobar2/p' "$testfile";;
         *) echo "Error: no match" >&2;;
esac \
| sed -e 1d -e '$d' -e '/^\s*$/d' | while read -r line; do
#            makingcurlCall=$(eval "$line")
            echo "makingcurlCall: $line"
done