你如何回到源bash脚本?

cod*_*dar 45 bash subprocess return exit

我使用一个使用bash源功能扩展的脚本;

#!/bin/bash

source someneatscriptthatendsprematurely.sh
Run Code Online (Sandbox Code Playgroud)

我希望能够从该脚本返回,而不会破坏主脚本.

使用退出中断主脚本,返回仅在函数中有效,并且试验$(退出1)似乎也不起作用.

那么,是否可以在不破坏主bash的情况下返回子bash脚本?

任何帮助赞赏!

pax*_*blo 70

你需要return声明:

return [n]

使函数以指定的返回值退出n.如果n省略,则返回状态是在函数体中执行的最后一个命令的状态.如果在函数外部使用,但在.(source)命令执行脚本期间,它会导致shell停止执行该脚本并返回脚本中执行n的最后一个命令的退出状态或脚本的退出状态.如果在函数外部使用而不是在执行脚本期间使用.,则返回状态为false.在函数或脚本之后执行恢复之前,将执行与RETURN陷阱关联的任何命令.

您可以使用以下两个脚本查看此操作:

script1.sh:
    . script2.sh
    echo hello again
script2.sh:
    echo hello
    return
    echo goodbye
Run Code Online (Sandbox Code Playgroud)

当你跑步时script1.sh,你会看到:

hello
hello again
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果可以,您应该默认显式返回0.不这样做会导致父脚本中出现意外行为.即`[ - z"non-existant-file"] && return`实际上将返回1. (4认同)
  • @BrettRyan你的例子的问题是`[ - z"non-existant-file"] && return 0`将返回1.所以告诉人们明确地'返回0`然后显示一个不起作用的例子是混乱. (4认同)