bash脚本的“标准化”文档字符串/自文档

时间:2019-03-01 16:51:37

标签: python bash shell scripting documentation

背景

例如,

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.


问题

脚本是否支持这种功能?也就是说,是否有一种“标准化”的方法来生成文件级的文档集(例如,脚本用途usage syntax等人类可读的描述;因此,另一个脚本很容易自动解析/要提取这些信息吗?我的目标是创建几个自我记录的调试脚本,如果已经有一种标准/事实上的最佳方法,我想避免重新发明轮子。

3 个答案:

答案 0 :(得分:3)

Google Shell Style Guide的“文件头”部分是向您的bash脚本中添加“文档字符串”的一种方法。

基本上,答案是使用#,而不是像Python那样使用引号。

答案 1 :(得分:1)

答案 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