bash脚本noob在这里。我发现了这篇文章:https://www.shellhacks.com/print-usage-exit-if-arguments-not-provided/建议使用
[ $# -eq 0 ] && { echo "Usage: $0 argument"; exit 1; }
在脚本的顶部,以确保传递参数。似乎是明智的。
但是,当我这样做并测试该行确实有效时(通过运行脚本而不提供任何参数:. myscript.sh
)然后脚本确实退出,但我调用的bash会话也是如此来自的脚本。这非常恼人。
显然,我做错了什么,但我不知道是什么。谁能让我直截了当?
答案 0 :(得分:4)
. myscript.sh
是source 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>