将脚本分配给包装脚本的变量

时间:2018-11-26 08:47:58

标签: bash variables sh filenames textwrapping

我正在尝试将bash脚本分配给在包装脚本中使用的变量,但是我尝试的每种方法都导致了“无此类文件或目录”错误:

#!/bin/bash 
textgen=$(< textcreator.sh)
tablegen=$(< tablecreator.sh)
htmlgen=$(< webcreator.sh)


 exec $textproces
 if [[ $textproces -eq 0 ]]
    then
        echo "Text Processing has ran successfully"
        exec $listgen
        if [[ $listgen -eq 0 ]]
          then
              echo "List Generation has ran successfully"
              exec $pagegen
              if [[ $pagegen -eq 0 ]]
                then
                    echo "HTML Page Generation has ran successfully"
                    echo "The command wrapper has finished successfully"
                    exit 0
                else
                  echo "Error: HTML Page Generation was unsuccessful"
                  exit 1
              fi
          else
             echo "Error: Text Processing was unsuccessful"
             exit 1
        fi
    else
        echo "Error: Text Processing was unsuccessful"
        exit 1
 fi

我尝试过的方法:cat文件名,导出,源和标准分配。这个想法是,它无需给出路径名即可工作,无论如何,所有这些shell都位于同一目录中。感谢所有帮助!

注意:我知道它令人恐惧,但这是我考虑使用IF语句的方式

2 个答案:

答案 0 :(得分:0)

这实际上取决于执行根脚本时所处的目录。因此,将它们放在同一目录中无济于事。在从根脚本执行子脚本之前,可以cd进入包含子脚本的目录。

答案 1 :(得分:0)

该代码中存在几个严重的问题。有些由Shellcheck标识。始终对新的和修改的代码运行Shellcheck。

问题包括:

  1. 开头分配的变量不是以后使用的变量。
  2. 将变量设置为程序的内容,而不是包含程序的文件的名称。 (使用内容的唯一方法是将它们传递给eval不是是个好主意。)
  3. exec用于尝试运行程序。 exec将新程序替换为新程序,该程序由其参数确定。这大致相当于运行另一个程序,然后立即退出。使用exec后,程序中之后的任何代码均不会执行。
  4. 未指定要运行的程序的路径。由于程序位于当前目录(.中,并且.通常不在PATH中(出于非常充分的理由),shell将针对以下情况发出“找不到命令”错误尝试运行它们。
  5. 代码尝试通过检查包含程序名称的变量的值来获取程序的退出状态。程序的退出状态可以通过内置变量$?获得。但是,检查命令是否失败的最简单方法是直接在if中使用它。

下面的Shellcheck干净代码试图解决问题。它还可以消除嵌套的if语句,以使代码更清晰。

#!/bin/bash

textgen=textcreator.sh
listgen=tablecreator.sh
pagegen=webcreator.sh

if ! "./$textgen" ; then
    echo "Error: Text Processing was unsuccessful"
    exit 1
fi

echo "Text Processing has ran successfully"

if ! "./$listgen" ; then
    echo "Error: List Generation was unsuccessful"
    exit 1
fi

echo "List Generation has ran successfully"

if ! "./$pagegen" ; then
    echo "Error: HTML Page Generation was unsuccessful"
    exit 1
fi

echo "HTML Page Generation has ran successfully"
echo "The command wrapper has finished successfully"

exit 0

该代码可以通过多种其他方式使用(例如,将错误输出发送到标准错误(... >&2),通过使用函数输出错误消息并退出程序来减少重复。