Python脚本可以通过docstrings
具有多个“级别”的文档。这样做的好处是,可以在每个功能级别,每个方法级别,每个类级别,最重要的是(在我的问题中)定义:每个文件级别。例如,文件的顶部可能看起来像这样:
#!/usr/bin/env python
"""
@brief A script that does cool stuff.
"""
What's especially useful about this feature is that it's easy to extract and print at run-time.
bash脚本是否支持这种功能?也就是说,是否有一种“标准化”的方法来生成文件级的文档集(例如,脚本用途usage
syntax等人类可读的描述;因此,另一个脚本很容易自动解析/要提取这些信息吗?我的目标是创建几个自我记录的调试脚本,如果已经有一种标准/事实上的最佳方法,我想避免重新发明轮子。
答案 0 :(得分:3)
Google Shell Style Guide的“文件头”部分是向您的bash脚本中添加“文档字符串”的一种方法。
基本上,答案是使用#
,而不是像Python那样使用引号。
答案 1 :(得分:1)
bash的文档字符串没有标准。最好有手册页(例如https://www.cyberciti.biz/faq/linux-unix-creating-a-manpage/)或信息页(https://unix.stackexchange.com/questions/164443/how-to-create-info-documentation)。
答案 2 :(得分:0)
您可以轻松地针对Bash进行此操作,如果您需要确保与POSIX唯一的外壳(例如/ bin / sh)或主要是busybox的系统(例如Alpine)兼容,则要麻烦一些。
Linux Documentation Project有一些很好的例子。
http://tldp.org/LDP/abs/html/here-docs.html
然而,这一巧妙技巧的另一种形式使“自我记录”脚本 可能。
示例19-12。一个自记录脚本
#!/bin/bash # self-document.sh: self-documenting script # Modification of "colm.sh". DOC_REQUEST=70 if [ "$1" = "-h" -o "$1" = "--help" ] # Request help. then echo; echo "Usage: $0 [directory-name]"; echo sed --silent -e '/DOCUMENTATIONXX$/,/^DOCUMENTATIONXX$/p' "$0" | sed -e '/DOCUMENTATIONXX$/d'; exit $DOC_REQUEST; fi : <<DOCUMENTATIONXX List the statistics of a specified directory in tabular format. --------------------------------------------------------------- The command-line parameter gives the directory to be listed. If no directory specified or directory specified cannot be read, then list the current working directory. DOCUMENTATIONXX if [ -z "$1" -o ! -r "$1" ] then directory=. else directory="$1" fi echo "Listing of "$directory":"; echo (printf "PERMISSIONS LINKS OWNER GROUP SIZE MONTH DAY HH:MM PROG-NAME\n" \ ; ls -l "$directory" | sed 1d) | column -t exit 0
使用cat脚本是完成此任务的另一种方法。
DOC_REQUEST=70 if [ "$1" = "-h" -o "$1" = "--help" ] # Request help. then # Use a "cat script" . . . cat <<DOCUMENTATIONXX List the statistics of a specified directory in tabular format. --------------------------------------------------------------- The command-line parameter gives the directory to be listed. If no directory specified or directory specified cannot be read, then list the current working directory. DOCUMENTATIONXX exit $DOC_REQUEST fi
一个使用函数处理文档和错误消息的优雅示例。
#!/bin/sh
usage() {
cat << EOF
Usage:
$0 [-u [username]] [-p]
Options:
-u <username> : Optionally specify the new username to set password for.
-p : Prompt for a new password.
EOF
}
die() {
echo
echo "$1, so giving up. Sorry."
echo
exit 2
}
if [ -z "$USER" ] ; then
die "Could not identify the existing user"
fi
if $PSET ; then
passwd $USER || die "Busybox didn't like your password"
fi
https://github.com/jyellick/mficli/blob/master/util/changecreds.sh