如何在可执行命令程序中获取命令行标志或选项

如何在可执行命令程序中获取命令行标志或选项

我制作了一个练习 C++ 程序,每次执行它时都会生成一个新密码,它会询问我密码长度,然后继续生成一个新的伪随机密码。

我将其目录添加到 PATH 环境变量中,以便可以从任何目录执行它。

我想知道如何修改可执行文件以获取命令行参数,以便我可以通过以下方式从终端调用它:

newpass -10
或者
newpass 10

这两者都会生成 10 个字符的密码。我目前将程序作为目标文件,必须将其执行为:

./newpass

答案1

Getopt仅获取一个命令行参数有点过大了。如果您的程序稍后需要更多选项和参数,您可能会考虑其他类似于getopt.对于更面向 C++ 的方式来解析更复杂的命令行,您可能需要查看提升计划选项图书馆。大多数语言(Java、Perl、Python、C、C++、Pascal 等)都有一个返回命令行参数的函数或语句库。

在 C 或 C++ 中,您可以简单地将第一个参数“10”或其他任何参数转换为整数。所有命令行参数都是字符串(char以零字节结尾的数组)。

像这样的东西:

  1. 将代码添加到主程序中以检查命令行参数,例如:

    int pwlength(10); // or whatever the default
    if (argc > 1) {
         // put code here to convert the string in argv[0] to an integer
         // and store in pwlength.
         // If the string cannot be converted,
         //    Print an error message and exit the program with
         //    the statement "return 1;" or "exit(1);" which
         //    notifies the caller of the executable that an error occurred.
     }
    std::cout << "Your password length will be: " << pwlength << std::endl;
    
  2. 添加目录文件newpass存储到PATH变量的位置,例如,假设newpass位于您的$HOME/bin目录中:
    PATH="$PATH:$HOME/bin"

  3. newpass使用以下命令更改文件的文件模式chmod
    chmod +x newpass

答案2

无耻地从这里复制:如何使程序在任何地方都可执行

“如果您只是在命令行中输入导出,PATH=$PATH:</path/to/file>它只会在会话期间持续。

如果你想永久更改它,请将导出添加PATH=$PATH:</path/to/file>到你的 ~/.bashrc 文件中(仅在最后即可)。” -oadams

相关内容