案例陈述的文件来源

时间:2017-05-17 15:41:38

标签: linux bash case

我有一个简单的代码,它运行一个随时间增长的case语句。我希望其他用户更新可能的情况,但我不希望他们更新代码。是否可以从名为optionsfile.txt的文件中获取选项?

当前样本:

read input
case $input in
option1 )
  echo option1 ;;
option2 )
  echo option2 ;;
esac

更改为:

read input
case $input in
Source in file here optionsfile.txt
esac

所以optionsfile.txt的内容如下所示:

option1 )
  echo option1 ;;
option2 )
  echo option2 ;;

3 个答案:

答案 0 :(得分:0)

如果你可以使用2个bash文件:

<强> src.sh

#!/bin/sh
echo -n "Input: "
read input
./optionsfile.sh input

<强> optionsfile.sh

#!/bin/sh
case ${1} in
    "a")
        echo "You gave me a"
        ;;
    "b")
        echo "I hate b"
        ;;
esac

但请不要使用此文件结构,不要那样调用optionsfile.sh :)这是我的小测试。

答案 1 :(得分:0)

所以我最终使用了一个脚本,如果在创建函数的optionsfile.txt上更新了日期时间戳,则会调用该脚本。该函数源自主代码。

#!/bin/bash
cat <<Part1
userstuff() {
read input
case $input in
Part1
cat ./optionsfile.txt
cat <<Part2
esac
}
Part2

谢谢。

答案 2 :(得分:0)

我的第一个想法是bash / shell可能是您尝试做的错误媒介,特别是如果您不希望用户触摸代码。 Bash太容易破碎了。在bash脚本中采购任何东西都必然让他们触摸代码。

我的第二个想法是将您的选项抽象为另一种格式(ini,yaml,json等),然后加强主脚本以使用第三方实用程序解析选项,例如crudini或{{ 1}}。

甚至可以使用更易于访问的内容(如PHP)。这是更宽容的方式。

所有这一切,如果您只是jq第二个文件,我建议做两件事:

  • 不要撒谎,并在其上加上.txt扩展名,
  • 把一个shebang放进去。

这样你就不会欺骗用户了解正在发生的事情。您的用户和他们使用的编辑将有更好的机会不破坏所有内容。

相关问题