我制作了一个练习 C++ 程序,每次执行它时都会生成一个新密码,它会询问我密码长度,然后继续生成一个新的伪随机密码。
我将其目录添加到 PATH 环境变量中,以便可以从任何目录执行它。
我想知道如何修改可执行文件以获取命令行参数,以便我可以通过以下方式从终端调用它:
newpass -10
或者
newpass 10
这两者都会生成 10 个字符的密码。我目前将程序作为目标文件,必须将其执行为:
./newpass
答案1
Getopt
仅获取一个命令行参数有点过大了。如果您的程序稍后需要更多选项和参数,您可能会考虑其他类似于getopt
.对于更面向 C++ 的方式来解析更复杂的命令行,您可能需要查看提升计划选项图书馆。大多数语言(Java、Perl、Python、C、C++、Pascal 等)都有一个返回命令行参数的函数或语句库。
在 C 或 C++ 中,您可以简单地将第一个参数“10”或其他任何参数转换为整数。所有命令行参数都是字符串(char
以零字节结尾的数组)。
像这样的东西:
将代码添加到主程序中以检查命令行参数,例如:
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;
添加目录文件
newpass
存储到PATH
变量的位置,例如,假设newpass
位于您的$HOME/bin
目录中:
PATH="$PATH:$HOME/bin"
newpass
使用以下命令更改文件的文件模式chmod
:
chmod +x newpass
答案2
无耻地从这里复制:如何使程序在任何地方都可执行
“如果您只是在命令行中输入导出,PATH=$PATH:</path/to/file>
它只会在会话期间持续。
如果你想永久更改它,请将导出添加PATH=$PATH:</path/to/file>
到你的 ~/.bashrc 文件中(仅在最后即可)。” -oadams