编写一个bash脚本,如何在脚本退出时停止退出会话?

时间:2018-03-09 14:21:25

标签: bash

bash脚本noob在这里。我发现了这篇文章:https://www.shellhacks.com/print-usage-exit-if-arguments-not-provided/建议使用 [ $# -eq 0 ] && { echo "Usage: $0 argument"; exit 1; }

在脚本的顶部,以确保传递参数。似乎是明智的。

但是,当我这样做并测试该行确实有效时(通过运行脚本而不提供任何参数:. myscript.sh)然后脚本确实退出,但我调用的bash会话也是如此来自的脚本。这非常恼人。

显然,我做错了什么,但我不知道是什么。谁能让我直截了当?

2 个答案:

答案 0 :(得分:4)

. myscript.shsource myscript.sh的同义词,它在当前shell 中运行脚本(而不是作为单独的进程)。所以exit终止你当前的shell。 (return,另一方面,它不会; source d脚本有特殊行为。)

使用./myscript.sh来运行它"正常方式"代替。如果这给您一个权限错误,请先使用chmod a+x myscript.sh将其设为可执行文件。要通知内核您的脚本应该使用bash(而不是/bin/sh)运行,请在脚本中添加以下内容作为第一行

#!/usr/bin/env bash

如果你不能使bash myscript.sh可执行,你也可以使用sh myscript.sh,但这更容易出错(有人可能会{{1}}代替)。

答案 1 :(得分:1)

问题似乎不清楚,如果您正在寻找在当前bash过程中解释的脚本source script_name. script_name,如果您正在运行一个函数,它在相同的进程中运行,否则,调用一个脚本,调用者bash分叉一个新的bash进程并等待它终止(因此运行exit不会退出调用者进程),但是当在当前bash中运行内置exit时它将退出当前进程。 / p>