我正在编写一组 bash 脚本。
第一个,wrapper
调用两个脚本:do_something
和do_something_else
.
在伪代码中:
$ wrapper
do_something
if exitcode of do_something = 0 then
do_something_else
else
exit with error
fi
exit success
这将生成一个日志文件:
$ cat /var/logs/wrapper.log | tail -3
Deleting file 299
Deleting file 300
wrapper ran successfully on 01/01/18 00:01:00 GMT
我有两个目标:
- 创建整个过程的日志。换句话说,我希望在一个日志文件中发送和发送到 stdout 和 stderr 的所有内容
do_something
,该日志文件显示该脚本的日常运行,以便我可以 grep 查找错误。do_something_else
wrapper
- 我想预编译
do_something
,do_something_else
因此wrapper
我可以将它们放入我/usr/bin
的scp
所有系统中。这样,我在 dev 中有一个源代码,在 prod 中有快速运行不可编辑的代码。
这可能吗?
以下是如何在一个脚本中处理此场景的示例,而不会丢失 OP 想要的功能,即:
能够同时运行多个逻辑块,或者一次运行一个逻辑块。
能够将这些操作记录到文件中。
这是一个简单的例子。如果你像对待任何其他语言一样对待脚本语言,并编写有组织的代码,突然间你可以用它做各种各样的事情。诀窍是不要在函数之外留下松散的逻辑块,这样你就可以轻松地切换东西,使用一个,而不是另一个,调试部分,添加一个日志功能,这是我通常会做的,error_handler( ), 等等。几乎不需要额外的工作,也就是说,您最终会得到一个简单但干净且易于维护的应用程序,而不是一堆堆叠在一起的随机动作。
文件:my_stuff
你会这样运行:
这当然只是一个示例,但实际上您所做的只是组织逻辑,按照您使用任何语言的方式安排它,然后触发所需的操作。我发现如果我启动 shell 脚本并假设它们将被使用和维护,并且如果我使用函数编写它们,那么它们就像我所做的任何其他编程一样灵活且易于维护。
关于日志文件部分的所有内容:用于
exec
重定向标准输出和标准错误,这里date
用于将日期放在日志文件名上: