在旨在交互使用的函数中显示使用注释

dim*_*414 11 bash function interactive

我在 my 中定义了许多函数.bashrc,旨在在终端中交互使用。我通常在它们之前添加一条描述其预期用途的评论:

# Usage: foo [bar]
# Foo's a bar into a baz
foo() {
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果浏览源代码,这很好,但是type在终端中运行以快速提醒该函数的作用是很好的。然而,这(可以理解)不包括评论:

$ type foo
foo is a function
foo ()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

这让我想到“如果这种评论持续存在以便type可以显示它们,那不是很好吗?” 本着 Python文档字符串的精神,我想出了这个:

foo() {
  : Usage: foo [bar]
  : "Foo's a bar into a baz"
  ...
}

$ type foo
foo is a function
foo ()
{
    : Usage: foo [bar];
    : "Foo's a bar into a baz";
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在该用法已包含在type输出中!当然,正如您所看到的,引用成为一个容易出错的问题,但它在工作时会提供更好的用户体验。

所以我的问题是,这是一个糟糕的主意吗?是否有更好的替代方案(如man/ infofor 函数)来为 Bash 函数的用户提供额外的上下文?

理想情况下,我仍然希望将使用说明放在函数定义附近,以便查看源代码的人也能从中受益,但如果有“正确”的方法来做到这一点,我愿意接受替代方案。

编辑这些都是相当简单的辅助样式函数,我只是想以交互方式获得一些额外的上下文。当然,对于解析标志的更复杂的脚本,我会添加一个--help选项,但对于这些脚本,向所有内容添加帮助标志会有些麻烦。也许这只是我应该接受的成本,但是这个:hack 似乎工作得相当好,而不会使源代码更难以阅读我们的编辑。

Joh*_*024 8

我不认为只有一种好方法可以做到这一点。

如果用户提供-h--help作为选项,许多函数、脚本和其他可执行文件会提供帮助消息:

$ foo() {
[[ "$1" =~ (-h|--help) ]] && { cat <<EOF
Usage: foo [bar]
Foo's a bar into a baz
EOF
return;
}
: ...other stuff...
}
Run Code Online (Sandbox Code Playgroud)

例如:

$ foo -h
Usage: foo [bar]
Foo's a bar into a baz

$ foo --help
Usage: foo [bar]
Foo's a bar into a baz
Run Code Online (Sandbox Code Playgroud)