标签: getopt

shell脚本的跨平台getopt

我刚刚发现这getopt不是跨平台的(特别是对于FreeBSD和Linux).这个问题的最佳解决方法是什么?

bash shell cross-platform getopt

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

OptionParser可以跳过未知选项,稍后在Ruby程序中处理吗?

有没有办法在一个Ruby程序中多次启动OptionParser,每个程序都有不同的选项?

例如:

$ myscript.rb --subsys1opt a --subsys2opt b
Run Code Online (Sandbox Code Playgroud)

在这里,myscript.rb将使用subsys1和subsys2,将它们的选项处理逻辑委托给它们,可能是首先处理'a'的序列,然后是单独的OptionParser对象中的'b'; 每次选择仅与该上下文相关的选项.最后阶段可以检查在每个部件处理完他们之后没有任何未知数.

用例是:

  1. 在松散耦合的前端程序中,各种组件具有不同的参数,我不希望'main'知道所有内容,只是为每个部分委派参数/选项集.

  2. 将一些更大的系统(如RSpec)嵌入到我的应用程序中,我只需通过命令行通过他们的选项,而不知道那些包装器.

我会用一些分隔符选项OK,以及像----vmargs在某些Java应用程序.

在Unix世界中有许多类似的东西的实际例子(startx/X,git plumbing和瓷器),其中一层处理一些选项但将其余部分传播到下层.

开箱即用,这似乎不起作用.每次OptionParse.parse!通话都会进行详尽的处理,对任何不知道的事情都会失败.我想我很乐意跳过未知选项.

任何提示,也许是替代方法都是受欢迎的.

ruby options getopt optparse

12
推荐指数
2
解决办法
6200
查看次数

C++和命令行选项

在C++程序中使用GNU getopt是不好的形式?是否有特定于C++的替代方案,或者我是否仍然只使用getopt?

c++ getopt

12
推荐指数
3
解决办法
5337
查看次数

Getopt-传递参数的字符串参数

我有一个程序,它接受多个命令行参数,所以我使用getopt.我的一个参数将字符串作为参数.无论如何通过getopt函数获取该字符串还是必须通过argv []数组获取它?也可以像getopt读取args一样-file吗?我到目前为止看到的所有论点只有一个如-a

编辑

从下面的答案中我编写了一个程序来使用getopt_long(),但是当我使用字符参数而不是long参数时,switch语句只识别参数.我不确定为什么会这样.在传递参数时,-mf -file sample我没有看到print语句.

编辑

我尝试输入命令参数--file,然后它工作.是不是可以这样做-file

static struct option long_options[] =
{
    {"mf", required_argument, NULL, 'a'},
    {"md", required_argument, NULL, 'b'},
    {"mn", required_argument, NULL, 'c'},
    {"mw", required_argument, NULL, 'd'},
    {"lf", required_argument, NULL, 'e'},
    {"ld", required_argument, NULL, 'f'},
    {"ln", required_argument, NULL, 'g'},
    {"lw", required_argument, NULL, 'h'},
    {"rf", required_argument, NULL, 'i'},
    {"rd", required_argument, NULL, 'j'},
    {"rn", required_argument, NULL, 'k'},
    {"rw", required_argument, NULL, 'l'},
    {"df", required_argument, NULL, 'm'},
    {"dd", required_argument, NULL, 'n'},
    {"dn", …
Run Code Online (Sandbox Code Playgroud)

c getopt

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

如何使用Getopt :: Std设置默认值?

我试图在我的Perl脚本中使用Getopt :: Std从命令行收集值.

use Getopt::Std;
$Getopt::Std::STANDARD_HELP_VERSION = 1;
getopts('i:o:p:');
my $inputfile = our $opt_i;
my $outputfile = our $opt_o;
my $parameter_value = our $opt_p;
Run Code Online (Sandbox Code Playgroud)

这里前两个变量($ inputfile,$ outputfile)是必需的,但最后一个变量($ parameter_value)是可选的,可以忽略.

我试图-p在命令行忽略该标志时默认将一些值设置为最后一个变量($ parameter_value).

我试过用这个:

my $parameter_value = our $opt_p || "20";
Run Code Online (Sandbox Code Playgroud)

在命令行中忽略-p标志时,它传递正确的值.但问题是当我从命令行提供一些值时(例如-p 58),相同的值20被传递给程序而不是我从命令行传递的58.

能否指出我在这里犯的错误,请你帮帮我吧?

谢谢.

perl getopt

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

PHP getopt操作

这个问题是关于php中的getopt函数.我需要将两个参数传递给php脚本,如

php script.php -f filename -t filetype
Run Code Online (Sandbox Code Playgroud)

现在根据文件类型可以是u,c或s我需要做正确的操作.

我正在使用相同的开关盒:

这是我正在使用的代码:

// Get filename of input file when executing through command line.
$file = getopt("f:t:");
Run Code Online (Sandbox Code Playgroud)

Switch case应该比较我从命令行(u,c或i)传入的文件的类型,并相应地匹配它并进行操作.

switch("I am not sure what should go in there and this is wrong,Please advice")
    {

        case `Not sure`:
            $p->ini();
            break;

        case `Not sure`:
            $p->iniCon();
            break;

        case `Not sure`:
            $p->iniImp();
            break;
    }
Run Code Online (Sandbox Code Playgroud)

请建议!!!

php file getopt

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

Perl GetOptions()区分大小写

GetOptions(
    "r|repo=s"       =>   \$repo,
    "R|list-repos"   =>   \$list,
);
Run Code Online (Sandbox Code Playgroud)

当我用-r qwe选项调用此脚本时,$list更新为1,这不是我所期望的.

如何使GetOpt区分大小写?

perl case-sensitive getopt

10
推荐指数
2
解决办法
3731
查看次数

argp和getopt有什么区别?

我认为标题是自我解释的.我正在制作一个节目,我想知道我应该使用哪两个以及为什么.

c arguments gnu getopt argp

9
推荐指数
1
解决办法
4172
查看次数

Python的argparse permute参数顺序可以像gnu getopt一样吗?

GNU getopt和使用它的命令行工具允许交叉选项和参数,称为置换选项(参见http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using -Getopt).Perl的Getopt :: Long模块也支持这个(使用qw(:config gnu_getopt)).argparse似乎不支持(甚至提及)置换选项.

有许多与arg/opt命令相关的SO问题,但似乎没有人回答这个问题:argparse可以像getopt那样置换参数顺序吗?

用例是一个典型的命令行签名,如GNU sort:

sort [opts] [files]
Run Code Online (Sandbox Code Playgroud)

其中1)选项和文件被置换,以及2)文件列表可以包含零个或多个参数.

例如:

import argparse
p = argparse.ArgumentParser();
p.add_argument('files',nargs='*',default=['-']);
p.add_argument('-z',action='store_true')

p.parse_args(['-z','bar','foo']) # ok
p.parse_args(['bar','foo','-z']) # ok
p.parse_args(['bar','-z','foo']) # not okay
usage: ipython [-h] [-z] [files [files ...]]
Run Code Online (Sandbox Code Playgroud)

我试过了:

  • p.parse_known_args - 没有抱怨,但实际上并没有置换,并且它不会忽略看起来像无效选项的参数(例如,--bogus或-b above).
  • p.add_argument('files',nargs = argparse.REMAINDER) - 选项-z包含在文件中,除非在位置args之前
  • p.add_argument( '文件',NARGS = '*',动作= '追加');

我想实现一些接近上面GNU排序原型的东西.我对可以为每个文件指定的标志不感兴趣(例如,-f file1 -f file2).

python command-line getopt command-line-arguments argparse

9
推荐指数
1
解决办法
1644
查看次数

命令行错误消息的"POSIX定义格式"是什么?哪个标准?

在ruby-doc.org 页面上, 我发现了以下有关命令行选项/参数解析(getopt库)的信息:

以POSIX定义的格式返回相应的错误消息.如果没有发生错误,则返回nil.

什么是POSIX定义的命令行错误消息格式?它是哪种POSIX标准?

编辑:

我必须澄清一下,在解析命令行参数/选项时,我对标准/推荐的错误消息感兴趣.

在下面的链接(答案)中,我发现只提到了getopt的这种错误格式:

"%s: illegal option -- %c\n", <program name>, <option character>

"%s: option requires an argument -- %c\n", <program name>, <option character>
Run Code Online (Sandbox Code Playgroud)

是这一切吗?

c ruby standards posix getopt

9
推荐指数
1
解决办法
1219
查看次数