【问题标题】:Running a program that requires a password on the command line from a Perl script从 Perl 脚本在命令行上运行需要密码的程序
【发布时间】:2012-10-11 09:22:23
【问题描述】:

我已经为一个 shell 脚本编写了一个 Perl 包装器。我正在使用 IPC::Run::Simple 来执行系统命令。举个例子:

run ("mkdir ~$usr/12.2.0_cp/faiz_cpv/$pdate") or die "Error $ERR";
run ("cp ~$usr/12.2.0_cp/faiz_cpv/MPlist.lst ~$usr/12.2.0_cp/faiz_cpv/$pdate") || die "Error: $ERR";
run ("cd ~$usr/12.2.0_cp/faiz_cpv/$pdate; sh /opsutils/mfg_top/rel/CPV/bin/list_generation.sh . MPlist.lst mfg_relall_us\@oracle.com") or die "error $ERR";
.
.

其中一个 shell 脚本要求脚本的用户输入他们的密码。也就是说,在标准输出上打印一条消息,并通过 shell 接受密码。在整个过程中会对该 shell 脚本进行多次调用,这意味着用户必须多次重新输入密码。

有没有一种方法可以让我在命令行本身向用户请求密码,并隐式传递该密码,而不是一次又一次地提示用户输入密码?

【问题讨论】:

  • 您应该选择IPC::Open3 或类似的东西,因为您基本上需要在生成的命令和脚本之间使用一些双向通信。
  • Perl 内置了mkdirFile::Copy 提供了一个复制例程。使用它们通常比炮击更安全、更快。虽然它不会为你翻译~
  • 如果您确实必须运行提示您输入密码等的外部程序,您可能需要调查Expect 模块。

标签: perl bash


【解决方案1】:

Perl 内置了mkdirchdirFile::Copy 提供了一个复制例程。使用它们通常比炮击更安全、更快。虽然它不会为您翻译~File::chdir 使更改目录和运行命令更加安全。

对于其余部分,使用完整的IPC::Run 来控制与程序的交互,使用Term::ReadLine::Gnu 来读取密码而不显示密码。抱歉,这只是一个草图,而不是完整的答案。

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2015-05-12
    相关资源
    最近更新 更多