Bash 配置脚本将值传递给另一个脚本
我得到了这两个脚本,configScript.sh和genScript.sh。第一个正是我想要的。我想让第二个选项保持上次运行配置文件时选择的选项,然后根据这一点显示正确的echo。现在,它始终显示第二个选项。这可行吗Bash 配置脚本将值传递给另一个脚本,bash,Bash,我得到了这两个脚本,configScript.sh和genScript.sh。第一个正是我想要的。我想让第二个选项保持上次运行配置文件时选择的选项,然后根据这一点显示正确的echo。现在,它始终显示第二个选项。这可行吗 #!/bin/bash -x func() { echo " Choose 1 - Option 1 2 - Option 2 " echo -n " Enter selection: " read select case $select in 1 )
#!/bin/bash -x
func()
{
echo "
Choose
1 - Option 1
2 - Option 2
"
echo -n " Enter selection: "
read select
case $select in
1 )
echo " Option 1 chosen"
export OPTION=one
. ./genScript.sh
;;
2 )
echo " Option 2 chosen"
option="two"
export OPTION=one
. ./genScript.sh
;;
esac
}
clear
func
为了澄清,如果我运行configScript.sh并选择option,它会根据需要输出选项1。如果我运行genScript.sh,我希望它也输出选项1
编辑*
更新了代码可能是导出选项而不是导出搜索栏。请尝试以下代码:
#!/bin/bash -x
func()
{
echo "
Choose
1 - Option 1
2 - Option 2
"
echo -n " Enter selection: "
read select
case $select in
1 )
echo " Option 1 chosen"
OPTION=one
export OPTION
./genScript.sh
;;
2 )
echo " Option 2 chosen"
OPTION=two
export OPTION
./genScript.sh
;;
esac
}
clear
func
#!/bin/bash
func2()
{
if [ ${OPTION} == "one" ] ; then
echo "Option one"
else
echo "Option two"
fi
}
func2
最后使用以下命令运行configScript.sh:/shell中的configScript.sh。我想知道您的shebang行之前是否有注释行:!必须是文件中的前2个字符 我还想知道您是否真的在用sh而不是bash执行这些脚本。改变
[ "$option" == "one" ]
到
配置脚本需要存储以下值,而不是导出:
declare -p OPTION > ~/.my_config
然后另一个脚本就可以了
. ~/.my_config
if [[ $OPTION == "one" ]]; ...
但这并不能解决这样一个事实,即如果我只是在shell中编写./genScript.sh,我希望更新后的genScript.sh运行,对吗?好的,现在我不理解实际问题,我的答案将不起作用。我已更改了答案,因此所选值应在第一个脚本终止后继续存在。我希望它能工作。如果我理解正确,我应该将configScript中的行从option=one export option./genScript.sh更改为export option=one./genScript.sh。如果是,则在运行脚本时会出现此错误。/genScript.sh:第5行:[:=:预期的一元运算符非常奇怪,我没有收到这样的错误。如果代码在两行以上工作,您可以切换回它。我忘记添加,您必须使用../configScript.sh运行第一个脚本。这意味着脚本将在父shell中运行并设置环境变量。我更改了,因此shebang是第一个。这将如果单独运行,仍然无法解决genScript.sh保留上次运行configScript.sh时的选项值的问题。哦,这是一个完全不同的问题:您需要将上一个值的值永久存储在某个位置,例如存储到文件中,然后genScript将必须读取该文件。@janos您可以指定I位吗更好?最好是代码示例,因为我对bash非常陌生
declare -p OPTION > ~/.my_config
. ~/.my_config
if [[ $OPTION == "one" ]]; ...