-1

这在 bash 中应该很简单,我不知道我为什么要为此苦苦挣扎。我是 bash 新手,所以请温柔一点。

伪代码:

    read a configuration file, extract the first line beginning with a key/value pair
    in the format exec=/path/to/myprog -opt1 -opt2 $var1 $var2 ...
    check that the /path/to/myprog is executable
    if executable then
       replace $var1, ... with the contents of the same bash variables in the script
       check that all variables were replaced with existing bash variables
       if aok 
           execute the command and be happy
       else
           complain echoing the partially-substituted command string
       fi
    else
       complain echoing the un-substituted command string
    fi

我尝试的任何方法似乎都无法正常工作。我已经消磨了足够的时间尝试各种事情。建议,有人吗?

4

1 回答 1

1

配置文件:

exec=/bin/ls -l $var1 $var2

bash 文件:

#!/bin/bash

CONFIG="tmp.conf"

var1=./
var2=helo

function readconf() {
    args=()
    while IFS=' ' read -ra argv; do
        exec=${argv[0]#*=}
        `command -v ${exec} >/dev/null 2>&1 || { echo >&2 "I require ${exec} but it's not installed.  Aborting."; exit 1; }`
        for i in "${argv[@]:1}"; do
            if [[ $i == \$* ]]; then
                sub=${i:1}
                args+=(${!sub})
            fi
        done
    done < $CONFIG
    echo ${args[@]}
}

readconf

上面的代码提供了实现所需的关键组件。至少我是这么认为的。您可以基于此骨架添加您的逻辑。

以下网址可能会有所帮助:

从 Bash 脚本检查程序是否存在

在 bash 中,如何检查字符串是否以某个值开头?

如何在 Bash 的分隔符上拆分字符串?

Bash:向数组添加值而不指定键

使用变量名作为变量名

于 2013-03-23T22:42:03.173 回答