【发布时间】: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 内置了
mkdir,File::Copy 提供了一个复制例程。使用它们通常比炮击更安全、更快。虽然它不会为你翻译~。 -
如果您确实必须运行提示您输入密码等的外部程序,您可能需要调查Expect 模块。