我有一个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
答案 0 :(得分: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"