Smalltalk 中未记录的 getopt

发布于 2024-11-28 06:43:23 字数 1029 浏览 3 评论 0原文

我正在编写一个命令行应用程序,用于加密密码和解密密码哈希值。 Getopt 的文档没有提供示例,所以我不知道如何使用 Getopt 类。 邮件列表日志中散布着一些线索。

特别是,我不知道 with:pattern 的格式、指定 CLI 参数的字符串以及值是必需的、可选的还是省略的。

ios7crypt.st:

"exec" "gst" "-f" "$0" "$0" "$@"
"exit"

| args password hash |

"Drop the program name."
"The shebang joins the arguments; we must split them."
args := (Smalltalk getArgv: 2) substrings: $ .

args do: [ :arg | Transcript show: 'Raw arg: ', arg; cr. ].

Getopt parse: args with: '-e: -d: -t' do: [ :opt :arg |
    Transcript show: 'Opt: ', (opt asString), ' Arg: ', arg; cr.

    "..."
].

运行示例:

$ ./ios7crypt.st -e monkey
Raw arg: -e
Raw arg: monkey
Opt: e Arg: monkey

之前,-emonkey 都传递给脚本,但 Getopt 的 do: 默默地删除了 -e,所以输出如下:

$ ./ios7crypt.st -e monkey
Raw arg: -e
Raw arg: monkey
Opt:  Arg: monkey

I'm writing a command line app that encrypts passwords and decrypts password hashes. The docs for Getopt provide no examples, so I have no idea how to use the Getopt class. A few clues are scattered in mailing list logs.

In particular, I don't know the format of with: pattern, the string specifying CLI arguments and whether values are required, optional, or omitted.

ios7crypt.st:

"exec" "gst" "-f" "$0" "$0" "$@"
"exit"

| args password hash |

"Drop the program name."
"The shebang joins the arguments; we must split them."
args := (Smalltalk getArgv: 2) substrings: $ .

args do: [ :arg | Transcript show: 'Raw arg: ', arg; cr. ].

Getopt parse: args with: '-e: -d: -t' do: [ :opt :arg |
    Transcript show: 'Opt: ', (opt asString), ' Arg: ', arg; cr.

    "..."
].

Example run:

$ ./ios7crypt.st -e monkey
Raw arg: -e
Raw arg: monkey
Opt: e Arg: monkey

Previously, both -e and monkey were passed to the script, but Getopt's do: silently dropped -e, so the output looked like:

$ ./ios7crypt.st -e monkey
Raw arg: -e
Raw arg: monkey
Opt:  Arg: monkey

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏末染殇 2024-12-05 06:43:23

我建议您在调试时使用#printString。它将提供面向程序员的表示(与 #displayString 相反)。

顺便说一句,您可以在 shebang 调用中使用“$@”,这样参数就不会被连接。

I suggest you use #printString when debugging. It will give a programmer-oriented representation (as opposed to #displayString).

BTW, you can use "$@" in the shebang invocation so that arguments are not joined.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文