我正在尝试将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语句的方式
答案 0 :(得分:0)
这实际上取决于执行根脚本时所处的目录。因此,将它们放在同一目录中无济于事。在从根脚本执行子脚本之前,可以cd
进入包含子脚本的目录。
答案 1 :(得分:0)
该代码中存在几个严重的问题。有些由Shellcheck标识。始终对新的和修改的代码运行Shellcheck。
问题包括:
eval
。不是是个好主意。)exec
用于尝试运行程序。 exec
将新程序替换为新程序,该程序由其参数确定。这大致相当于运行另一个程序,然后立即退出。使用exec
后,程序中之后的任何代码均不会执行。.
中,并且.
通常不在PATH
中(出于非常充分的理由),shell将针对以下情况发出“找不到命令”错误尝试运行它们。$?
获得。但是,检查命令是否失败的最简单方法是直接在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
),通过使用函数输出错误消息并退出程序来减少重复。