为什么使用带有重定向的stdin的man
来显示BASH脚本中的帮助是一个坏主意还是与BASH的所有(在合理范围内)版本兼容,是否有任何理由?
该技术可以很好地使用我可以轻松访问的两个版本的BASH:GNU BASH v.4.3.11和4.3.30(都在Linux上)。在我看来,在脚本中显示脚本帮助的优雅方式是,当下载它的人不太可能打扰安装手册页时,手册页已经被编写。
下面是我的意思的一个简单的例子。在命令行上使用help选项时将调用display_usage_message
函数,并且当函数返回时脚本将调用exit
。
#!/bin/bash
display_usage_message()
{
man /dev/stdin <<EOF
.TH SCRIPT 1 "01 Oct 2015" "1.0" "SCRIPT VERSION 1.0"
.SH NAME
Script \- whatever it does.
.SH SYNOPSIS
script options etc.
.SH DESCRIPTION
This is a description which is not very long. :)
EOF
}
display_usage_message
exit
感谢。
编辑:根据chepner的评论,这种轻微变化是否可靠?
#!/bin/bash
display_usage_message()
{
temp_man_filename=$(mktemp -q -t "tmp.man.page.XXXXXX")
cat <<EOF >>$temp_man_filename
.TH SCRIPT 1 "01 Oct 2015" "1.0" "SCRIPT VERSION 1.0"
.SH NAME
Script \- whatever it does.
.SH SYNOPSIS
script options etc.
.SH DESCRIPTION
This is a description which is not very long. :)
EOF
man $temp_man_filename
rm $temp_man_filename
}
display_usage_message
exit
答案 0 :(得分:0)
期望帮助信息是一个简短的 - 理想情况下,不是一个屏幕 - 提醒可用的功能,而手册相反应该解释概念和文档错误消息,退出代码,操作限制,等
更基本的是,将部分或全部文档保留在源代码中或与源代码相结合是良好的做法,积极推广,例如在Knuth的Literate Programming中并通过例如(例如,可能不那么严格和正式)实践Perl POD和Javadoc作者。
顺便说一下,man
标记在这个时代感觉有些模糊。也许你会想要探索POD或Markdown作为更友好,更现代的替代方案(虽然不太适合高级用途)。 POD很容易嵌入到shell脚本中,格式化工具将安装在Perl的任何地方。