我有两个脚本,configScript.sh
和genScript.sh
。第一个就像我想要的那样工作。它会将正确的值添加到options.sh
和echo
正确的消息中。但是,我希望genScript.sh
接受options.sh
中的当前参数并输出正确的echo
。就像现在我运行genScript.sh
时它返回null
而我无法找出原因。
#!/bin/bash -x
#configScript.sh
func()
{
echo "
Choose
1 - Option 1
2 - Option 2
"
echo -n " Enter selection: "
read select
case $select in
1 )
echo " Option 1 chosen"
. ./genScript.sh one
cat << EOF >options.sh
OPTION=$OPTION
EOF
;;
2 )
echo " Option 2 chosen"
. ./genScript.sh two
cat << EOF >options.sh
OPTION=$OPTION
EOF
;;
esac
}
func
#!/bin/bash -x
#genScript.sh
. options.sh
OPTION=$1
func2()
{
if [ "$OPTION" == one ] ; then
echo "Option one"
elif [ "$OPTION" == two ] ; then
echo "Option two"
else
echo "null"
fi
}
func2
我设法通过删除genScript.sh
让OPTION=$1
以我想要的方式工作。当我这样做时,genScript.sh
会接受options.sh
中的值并输出正确的echo
。但是,当我移除OPTION=$1
configScript.sh
时,它会停止正常工作,但不再使用新值更新options.sh
。
答案 0 :(得分:1)
问题在于您希望调用genScript的方式。我想你想用命令行参数运行genScript,以及从options.sh中获取源代码。
以下对genScript.sh的更改将达到目的。当命令行和options.sh都有值时,它会优先使用命令行。
#!/bin/bash -x
#genScript.sh
OPTION=""
. options.sh
[ "$1" ] && OPTION=$1
func2()
{
if [ "$OPTION" == one ] ; then
echo "Option one"
elif [ "$OPTION" == two ] ; then
echo "Option two"
else
echo "null"
fi
}
func2
答案 1 :(得分:0)
只需在第二个脚本和第一个脚本中放置“one”和“two”的引号,然后在第一个脚本中生成options.sh,并在第二个脚本中为OPTION var添加默认值$ OPTION,这样它就可以了。
#!/bin/bash -x
#configScript.sh
func()
{
echo "
Choose
1 - Option 1
2 - Option 2
"
echo -n " Enter selection: "
read select
case $select in
1 )
echo " Option 1 chosen"
. ./genScript.sh one
cat << EOF >options.sh
OPTION="$OPTION"
EOF
;;
2 )
echo " Option 2 chosen"
. ./genScript.sh two
cat << EOF >options.sh
OPTION="$OPTION"
EOF
;;
esac
}
func
#!/bin/bash -x
#genScript.sh
. options.sh
OPTION=${1-$OPTION}
func2()
{
if [ "$OPTION" == "one" ] ; then
echo "Option one"
elif [ "$OPTION" == "two" ] ; then
echo "Option two"
else
echo "null"
fi
}
func2
这是最烦人的问题之一。我不知道你是否正在使用带有语法高亮的编辑器,但最好还是让你在这类问题上轻松运行。