包含一个脚本函数到另一个

时间:2013-09-17 14:29:16

标签: regex shell sed busybox ash

我需要将一个函数从一个shell脚本添加到另一个shell脚本并启动它。 基本上,流程应该如下所示:

  1. Shell脚本检查是否提供了具有函数的文件
  2. 检查提供的文件中的某些功能
  3. 如果功能可用 - 切换到相应的用户并运行此功能。
  4. 问题描述:

    • Busybox Ash用作shell解释器。
    • $ function应该在隔离的shell中调用,不应该搞乱主脚本。
    • 除了$ function之外,不应该执行任何代码
    • 不需要与用户互动

    可能的解决方案:

    • 首先解决方案是使用包含第二个文件。命令。 它看起来像这样:

      $function=boo
      su $userName -e -c ". $filePath; type -t $function"
      if [ $? -eq 0 ];
      then
        su $userName -e -c ". $filePath; $function"
      fi
      

    这里我们切换到相应的用户并在main bash脚本中包含$ filePath。 我们还检查是否在该文件中定义了$ function,如果它可用,我们将启动它。 当$ filePath中的代码存在于任何函数之外时,问题就开始了。 Ash决定在每次include(。)操作期间运行它。这可能会导致问题。有没有办法在不运行代码的情况下导入其他文件函数?

    • 我出来的第二个解决方案是使用sed过滤掉函数。

      sed -e '/^boo()/,/^}/!d' $filepath;

      sed -e '/^boo() *{.*}[^$]*/!d' $filepath;

    第一个请求允许过滤函数boo()直到关闭括号。 第二个包括整个函数写在一行中的情况。 是否有可能使用一个正则表达式覆盖所有函数语法案例?

    可能有另一种方法可以解决这个问题吗?

0 个答案:

没有答案