向脚本添加帮助命令

Posted

技术标签:

【中文标题】向脚本添加帮助命令【英文标题】:Adding a help command to a script 【发布时间】:2012-11-27 19:37:51 【问题描述】:

有向脚本添加帮助功能的标准方法吗?最简单的方法可能是接受一个参数并打印一些文本,如果它是“-help”或其他东西。有没有人有任何关于如何做到这一点的例子?

谢谢!

【问题讨论】:

【参考方案1】:

我这样做的方法是利用Getopt::Std 从命令行参数中找到-h 标志。

use strict;
use warnings;
use Getopt::Std;

my %args;
getopts('h', \%args);

my $help = "help goes here. You can use
more than one line to format the text";

die $help if $argsh;
# otherwise continue with script...

更复杂的方法是使用POD::usage,虽然我没有亲自尝试过这种方式。

【讨论】:

【参考方案2】:

考虑Getopt::Long 加上Pod::Usage。我编写 CLI 工具的常用模式:

#!/usr/bin/env perl
# ABSTRACT: Short tool description
# PODNAME: toolname
use autodie;
use strict;
use utf8;
use warnings qw(all);

use Getopt::Long;
use Pod::Usage;

# VERSION

=head1 SYNOPSIS

    toolname [options] files

=head1 DESCRIPTION

...

=cut

GetOptions(
    q(help)             => \my $help,
    q(verbose)          => \my $verbose,
) or pod2usage(q(-verbose) => 1);
pod2usage(q(-verbose) => 1) if $help;

# Actual code below

【讨论】:

【参考方案3】:

看看https://github.com/qazwart/SVN-Watcher-Hook/blob/master/svn-watch.pl。我使用一种技术来组合Getopt::Long 模块和Pod::Usage 模块。

主要动作发生在第 97 到 106 行和第 108 到 110 行。

Getopt::Long 是一个非常常用的模块,因为它可以轻松处理命令行参数。很少使用 Pod 文档。但是,所有 CPAN 模块和所有 Perl 内置模块都使用 Pod 文档,所以如果你不知道,learn it。 POD 并不难学,而且它内置在 Perl 中,因此所有 Perl 程序都可以自我记录。您可以使用perldoc 命令打印出任何程序的 POD 文档。试试这个:

$ perldoc File::Find

您还可以使用pod2htmlpod2text等类型的翻译命令将POD文档打印成HTML等。

在我了解 POD 之前,我会在我的程序顶部放置这样的内容:

########################################################
# USAGE
#
my $USAGE =<<USAGE;

     Usage:

         foo [ -baz -fu <bar>] [-help]

         where:

             baz: yadda, yadda, yadda
             fu:  yadda, yadda, yadda
           help:  Prints out this helpful message

USAGE
#
######################################################

然后,在我的程序中,我可以这样做:

if ($help) 
    print "$USAGE\n";
    exit 0;

这样,有人可以查看代码并阅读使用文本。这也将与您使用 -help 参数时打印出的文本相同。

【讨论】:

【参考方案4】:

易于使用:

if( $ARGV[0] eq '-h' || $ARGV[0] eq '-help')

help();
exit;



sub help  print "My help blah blah blah\n";

【讨论】:

以上是关于向脚本添加帮助命令的主要内容,如果未能解决你的问题,请参考以下文章

我需要帮助使用 Sed 向文件添加标题

linux系统中SFTP脚本如何添加打包tar命令

在 Java 中,允许程序向 CMD.exe 发送命令的小帮助

linux下,如何添加man帮助

Python 处理脚本的命令行参数:使用argparse

linux中的帮助命令