0

我有一个 bash 脚本“test.sh”,我想使用的一个参数是 --no-email。

当我运行 test.sh --no-email 时,一切都按预期工作,我没有收到电子邮件状态报告。

然而,我真正想要运行的是“test.sh test.cnf”,其中 --no-email 参数与大量其他参数一起存储在 test.cnf 文件中。我这辈子都无法让它发挥作用。也许我完全愚蠢而不理解?

非常感谢

echo $*|grep -se '--no-email'&>/dev/null
SEND_MAIL=`echo $?`

echo -e "DEBUG: \$*=$*"

if [ ! "$SEND_MAIL" == "0" ]; then
  echo 'Mail would have been sent!'
else
  echo 'NO MAIL WOULD HAVE BEEN SENT!'
fi
4

1 回答 1

1

如果您无法修改脚本test.sh以支持此功能,您仍然可以使用此语法从配置文件中获取参数:

test.sh $(<test.cnf)

如果这个假设不成立,即您想修改test.sh自己以支持这一点,那么您必须更具体地了解内部发生的情况test.sh

编辑:现在的内容test.sh已添加到问题中。从那里开始,最简单的事情是这样的:

grep -sqe '--no-email' "$*"
SEND_MAIL=$?

但是您写道,您还有许多其他参数。为每个人做grep一个可能不方便。在这种情况下,您可以像这样遍历 cnf 文件的单词:

#!/bin/bash

while read line; do 
    for word in $line; do
        echo "examing $word"
        case "$word" in 
        --no-email) 
            SEND_MAIL=0
        ;;
        --no-foo)
            NO_FOO=0
        ;;
        *)
            echo 1>&2 "WARNING: Unknown parameter: $word"
        ;;
    esac
    done
done < "$1"
于 2012-11-17T12:38:02.593 回答