如何打破源Bash脚本的功能
我有一个源代码的
Bash脚本.当这个脚本来源时,它在Bash脚本中运行一个函数.如果匹配某个条件,此函数应终止脚本.如何在不终止脚本所在的shell的情况下完成此操作?
要明确:我希望终止操作由源shell脚本中的函数完成,而不是在源shell脚本的主体中完成.我可以看到的问题是,返回只是从函数返回到脚本的main,而exit 1终止了调用shell. 以下最小示例说明了此问题: main(){ echo "starting test of environment..." ensure_environment echo "environment safe -- starting other procedures..." } ensure_environment(){ if [ 1 == 1 ]; then echo "environment problemm -- terminating..." # exit 1 # <-- terminates calling shell return # <-- returns only from function,not from sourced script fi } main 解决方法
这是一个如何使用您的方法实现目标的方法.我不会为你编写代码,只是描述它是如何完成的.
您的目标是通过有效地获取可能复杂的shell脚本来设置/更改当前bash shell中的环境变量.此脚本的某些组件可能决定应停止执行此源脚本.使这个复杂化的原因是这个决定不一定是顶级的,但可能位于嵌套的函数调用中.返回,然后,没有帮助,退出将终止采购外壳,这是不希望的. 您的此声明使您的任务变得更容易:
这是你如何做到的: 您可以获取另一个脚本“ipcscript.bash”,而不是寻找决定将哪个环境设置为什么(“realscript.bash”)的真实脚本. ipcscript.bash将设置一些进程间通信.这可能是您使用exec打开的一些额外文件描述符上的管道,它可能是一个临时文件,它可能是其他内容. 然后ipcscript.bash将启动realscript.bash作为子进程.这意味着,realscript.bash首先只会影响bash的子进程实例的环境.将realscript.bash作为子进程启动,您可以使用exit终止任何嵌套级别的执行,而不会终止sourcing shell. 当您编写时,您的退出调用将在一个集中函数中生效,该函数在决定终止执行时从任何级别调用.在退出之前,您的终止功能现在需要以适当的格式将当前环境写入IPC机制. ipcscript.bash将从IPC机制中读取环境设置,并在源代码shell的过程中重现所有设置. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |