标签: getopt

在bash shell脚本中使用getopts来获取长和短的命令行选项

我希望使用我的shell脚本调用多种形式的命令行选项.

我知道getopts可以使用,但就像在Perl中一样,我无法对shell做同样的事情.

关于如何做到这一点的任何想法,以便我可以使用如下选项:

./shell.sh --copyfile abc.pl /tmp/
./shell.sh -c abc.pl /tmp/
Run Code Online (Sandbox Code Playgroud)

在上面,两个命令对我的shell意味着相同的东西,但使用getopts,我还没有能够实现这些?

bash getopt getopts command-line-arguments

390
推荐指数
17
解决办法
39万
查看次数

为什么要使用argparse而不是optparse?

我注意到Python 2.7文档包含另一个命令行解析模块.除了getoptoptparse我们现在有argparse.

为什么还创建了另一个命令行解析模块?我为什么要用它而不是optparse?是否有我应该了解的新功能?

python command-line getopt optparse argparse

275
推荐指数
5
解决办法
12万
查看次数

getopt不解析参数的可选参数

在C中,getopt_long不会解析命令行参数参数的可选参数.

当我运行程序时,无法识别可选参数,如下面的示例运行.

$ ./respond --praise John
Kudos to John
$ ./respond --blame John
You suck !
$ ./respond --blame
You suck !
Run Code Online (Sandbox Code Playgroud)

这是测试代码.

#include <stdio.h>
#include <getopt.h>

int main(int argc, char ** argv )
{
    int getopt_ret, option_index;
    static struct option long_options[] = {
               {"praise",  required_argument, 0, 'p'},
               {"blame",  optional_argument, 0, 'b'},
               {0, 0, 0, 0}       };
    while (1) {
        getopt_ret = getopt_long( argc, argv, "p:b::",
                                  long_options,  &option_index);
        if (getopt_ret == -1) break;

        switch(getopt_ret)
        {
            case 0: break;
            case 'p': …
Run Code Online (Sandbox Code Playgroud)

c arguments getopt getopt-long optional-arguments

43
推荐指数
2
解决办法
3万
查看次数

getopts的可选选项参数

while getopts "hd:R:" arg; do
  case $arg in
    h)
      echo "usgae" 
      ;;
    d)
      dir=$OPTARG
      ;;
    R)
      if [[ $OPTARG =~ ^[0-9]+$ ]];then
        level=$OPTARG
      else
        level=1
      fi
      ;;
    \?)
      echo "WRONG" >&2
      ;;
  esac
done
Run Code Online (Sandbox Code Playgroud)
  • level是指参数-R,dir是指参数-d

  • 当我输入 ./count.sh -R 1 -d test/它正确的工作

  • 当我输入./count.sh -d test/ -R 1它正确的工作

  • 但我想在输入./count.sh -d test/ -R或输入时使其工作./count.sh -R -d test/

这意味着我想要-R一个默认值,命令序列可以更灵活.

bash getopt getopts

34
推荐指数
5
解决办法
5万
查看次数

如何在bash中同时支持短期和长期期权?

我想在bash脚本中支持短期和长期选项,因此可以:

$ foo -ax --long-key val -b -y SOME FILE NAMES
Run Code Online (Sandbox Code Playgroud)

可能吗?

bash getopt getopt-long

29
推荐指数
1
解决办法
3万
查看次数

getopt.h:在Windows中编译Linux C-Code

我试图在Windows下编译一组九个*.c文件(以及九个相关的*.h文件).

该代码最初是在Linux中设计的,用于使用标准GNU-Linux/C库"getopt.h"获取命令行参数.该库不适用于在Windows中构建C代码.

我想忽略我的代码现在所做的事情并提出以下问题.对于那些熟悉这个C库"getopt.h"的人:如果它依赖于POSIX风格的命令行参数,是否可以在Windows中构建和运行我的代码?或者我是否必须重新编写适用于Windows的代码,以不同方式传递输入文件(并放弃"getopt.h"依赖关系)?

c build getopt command-line-arguments visual-studio

29
推荐指数
4
解决办法
7万
查看次数

C#的GetOpt库

我正在为c#寻找一个getopt库.到目前为止,我发现了一些(phpguru,XGetOptCS,getoptfordotnet),但这些看起来更像未完成的尝试,只支持C的getopt的一部分.是否有完整的getopt c#实现?

c# getopt

28
推荐指数
2
解决办法
2万
查看次数

使用getopt/optparse为一个选项处理多个值?

是否可以使用getopt或optparse为一个选项获取多个值,如下例所示:

./hello_world -c arg1 arg2 arg3 -b arg4 arg5 arg6 arg7
Run Code Online (Sandbox Code Playgroud)

请注意,每个选项(-c,-b)的实际值数可以是1或100.我不想使用: ./hello_world -c "arg1 arg2 arg3" -b "arg4 arg5 arg6 arg7"

在我看来,这可能是不可能的(也许违反了POSIX),如果我错了,请纠正我.

我已经看到了一些例子,其中./hello_world -c arg1 -b arg1 arg2 arg3可以收集line()末尾的所有非选项......但不是第一个多选项.

我希望我的应用程序可以在不同的Python版本的各种平台上工作,所以我没有看过argparser.

python getopt

27
推荐指数
6
解决办法
3万
查看次数


在使用PHP的getopt()之后,我怎么知道哪些参数仍然存在?

好的,所以PHP有一个内置的getopt()函数,它返回有关用户提供的程序选项的信息.只是,除非我遗漏了什么,否则它完全被淹没了!从手册:

选项的解析将在找到的第一个非选项时结束,后面的任何内容都将被丢弃.

因此,getopt()返回一个仅包含有效和已解析选项的数组.您仍然可以通过查看看到整个原始命令行$argv,它仍未修改,但您如何判断该命令行中何处getopt()停止解析参数?如果您想将命令行的其余部分视为其他内容(例如,文件名),则必须知道这一点.

这是一个例子......

假设我想设置一个脚本来接受以下参数:

Usage: test [OPTION]... [FILE]...

Options:
  -a  something
  -b  something
  -c  something
Run Code Online (Sandbox Code Playgroud)

然后我可以这样打电话getopt():

$args = getopt( 'abc' );
Run Code Online (Sandbox Code Playgroud)

而且,如果我像这样运行脚本:

$ ./test.php -a -bccc file1 file2 file3
Run Code Online (Sandbox Code Playgroud)

我应该期望将以下数组返回给我:

Array
(
    [a] =>
    [b] =>
    [c] => Array
        (
            [0] =>
            [1] =>
            [2] =>
        )
)
Run Code Online (Sandbox Code Playgroud)

所以问题是:在地球上我应该知道三个未解析的非选项FILE参数从$argv[ 3 ]??? 开始

php getopt

25
推荐指数
1
解决办法
7248
查看次数