Articles of 命令行参数

在C / C ++中创build一个unix / linux命令行工具的最佳做法是什么?

我目前负责为内部开发团队创build一些命令行帮助工具。 但是,我想知道创buildunix命令行工具的最佳实践。 我已经尝试查看git源代码 ,以了解如何读取参数并相应地显示消息的示例。 然而,我正在寻找一个清晰的模板来创build一个工具,安全地读取参数,并显示标准的“帮助”消息,如果用户键入一个不正确的参数或帮助我想显示帮助信息。 是否有一个标准的库阅读-abcFGH和 – –parameter和切换哪个进程基于传递的参数启动? 命令行: git 要么 git –help 输出: usage: git [–version] [–exec-path[=<path>]] [–html-path] [–man-path] [–info-path] [-p|–paginate|–no-pager] [–no-replace-objects] [–bare] [–git-dir=<path>] [–work-tree=<path>] [–namespace=<name>] [-c name=value] [–help] <command> [<args>] … 命令行: MyTool CommandName –CommandArgs 输出: 无论具体的命令如何 我到目前为止工作的是: 码: int main(int argc, char **argv) { if(argc < 2) helpMessage(); char* commandParameter = argv[1]; […]

具有多个参数的xargs

我有一个源input, input.txt a.txt b.txt c.txt 我想将这些input提供给一个程序,如下所示: my-program –file=a.txt –file=b.txt –file=c.txt 所以我尝试使用xargs ,但没有运气。 cat input.txt | xargs -i echo "my-program –file"{} 它给 my-program –file=a.txt my-program –file=b.txt my-program –file=c.txt 但我想要 my-program –file=a.txt –file=b.txt –file=c.txt 任何想法?

在bash中输出*的长度限制是多less?

在Bash echo * 几乎等于ls 。 你可以做类似的事情 echo */*-out/*.html > all-my-html-files-on-one-line 由于*是一个命令行参数,所以应该有一个长度的限制。 这是什么限制? echo Bash命令和/bin/echo程序之间的限制是不同的?

最大数量的Bash参数!=最大数量cp参数?

我最近一直在复制和移动大量的文件(〜400,000)。 我知道在Bash命令行上可以扩展的参数数量有限制,所以我一直使用xargs来限制生成的数字。 出于好奇,我想知道我可以使用的参数的最大数量是多less,而且我发现这个post说这是系统相关的,我可以运行这个命令来找出: $ getconf ARG_MAX 令我惊讶的是,我回来的那个小女孩是: 2621440 刚超过260万 。 正如我所说,我正在操作的文件数量远远less于这个数字 – 大约是40万。 我肯定需要使用移动和复制这些文件的xargs方法,因为我尝试使用正常的mv * …或cp * …并且得到了“参数列表太长”的错误。 那么, mv和cp命令对于我可以使用的参数数量有自己的固定限制(我在man手册中找不到任何东西),还是我错过了一些东西?

如何在Linux中启动GDB时传递命令行参数?

我必须debugging一个有错误的程序,作为我的任务的一部分。 不过,我必须先通过命令行参数来解决这个问题。 我做: gdb -tui InsertionSortWithErrors 哪些工作,但之后,我不知道如何传递论据。 我使用gdb -help ,它说了一些关于–args ,我也试过了,它不起作用。 我希望能够得到debugging器+ gui并传递命令行参数。

Windows不会将命令行parameter passing给从shell执行的Python程序

如果我试图直接从Windows命令行执行它们作为可执行命令,那么我无法获得传递给Python程序的命令行参数。 例如,如果我有这个程序(test.py): import sys print "Args: %r" % sys.argv[1:] 并执行: >test foo Args: [] 相比于: >python test.py foo Args: ['foo'] 我的configuration有: PATH=…;C:\python25;… PATHEXT=…;.PY;…. >assoc .py .py=Python.File >ftype | grep Python Python.CompiledFile="C:\Python25\python.exe" "%1" %* Python.File="C:\Python25\python.exe" "%1" %* Python.NoConFile="C:\Python25\pythonw.exe" "%1" %*

有没有办法使用WScript.Shell启动一个VBScript最小化的程序?

这里是我现在启动一个应用程序的一些示例代码: Set objShell = Wscript.CreateObject("WScript.Shell") objShell.Run """C:\Program Files\Handbrake\HandBrakeCLI.exe""" 我试着下面启动最小化的应用程序,但它没有工作。 我假设这只能从一个正常的命令提示符起作用? Set objShell = Wscript.CreateObject("WScript.Shell") objShell.Run "start /MIN ""C:\Program Files\Handbrake\HandBrakeCLI.exe""" 我也尝试启动一个快捷方式(这只是给了一个null错误,脚本无法运行),以及试图做一个sendkeys以尽量减less它根本没有工作。 顺便说一句,这是从一个VBScript运行通过cscript.exe。 有谁知道我可以启动这个应用程序在VBScript中最小化?

在CMD批处理脚本中调用标签时,如何利用超过9个参数?

我想知道如何在调用标签时在批处理脚本中调用超过9个参数。 例如,下面的例子显示我有12个参数,试图回显所有的参数。 CALL:LABEL "one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten" "eleven" "twelve" PAUSE GOTO:EOF :LABEL echo %1 echo %2 echo %3 echo %4 echo %5 echo %6 echo %7 echo %8 echo %9 echo %10 echo %11 echo %12 %10%11和%12的输出结果是1个one1。 我已经尝试使用大括号,括号,引号,单引号周围的数字没有任何运气。

boost :: program_options – 它做一个确切的string匹配的命令行选项?

boost :: program_options的options_description匹配的方式似乎有问题。 int main(int argc, char* argv[]) { boost::program_options::options_description desc("CmdLine utility"); desc.add_options() ("hel", "hel message") ("help", "produce help message") ("helps","helps message") ; boost::program_options::variables_map vm; boost::program_options::store(boost::program_options::parse_command_line(argc, argv,desc), vm); boost::program_options::notify(vm); if(vm.count("help")) { std::cout << desc << std::endl; } if(vm.count("helps")) { std::cout << "helps…" << std::endl; } if(vm.count("hel")) { std::cout << "hel…" << std::endl; } return 0; […]

CreateProcess和命令行参数

背景信息: Windows 7,Visual C ++ 2010 Express 问题: CreateProcess()保持返回“无效的命令行参数” 说明:我正在编写一段使用Windows API的CreateProcess调用外部程序的代码。 到目前为止,我已经得到了一个外部程序的调用: if( !CreateProcess( "C:\\Temp\\convert.exe", t_str, // Arguments … } //where t_str is " C:\\img1.jpeg C:\\img1.pgm" (ImageMagick if you're wondering). 即使数据量很大,我也可以将所有内容都推送到Windowsstring和指针中。 所以我复制了所有的CreateProcess()调用另一个外部程序的调用: if( !CreateProcess( "C:\\Temp\\sift.exe", t_str2, // Arguments … } //where t_str2 is ` < C:\\img1.pgm > C:\\img1.key` 基本上,非常相似的东西,但所有的variables名称更改(因为我有这两个调用运行串行)。 这就是问题所在。 这不会运行,而是打印出“无效的命令行参数:<C:\ img1.pgm”。 当然,这个命令在命令提示符下工作正常,但在我的代码中没有。 我把t_str2转换成了一些不那么复杂的东西(因为我知道sift.exe是如何工作的),并得到了相同的结果。 同样的事情发生时,我只是运行筛选,而不是转换。 […]