我正在编写一个shell脚本来自动安装cpan
(Comprehensive Perl Archive Network)模块。
#!/bin/bash
perl -MCPAN -e shell
o conf make_arg -I/"$PWD"
o conf make_install_arg -I/"$PWD"
正在执行第一个命令,它进入cpan shell,但未检测到后面的命令。我认为后来的命令没有被执行,因为它是一个不同的shell。 任何领导都表示赞赏。
感谢。
答案 0 :(得分:2)
您正在编写bash脚本,而o conf ....
不是bash命令。
您可以通过
远程控制CPAN shell提供文件中的所有输入,从中重定向stdin,即perl -MCPAN -e shell <my_commands.txt
。请注意,如果CPAN shell在每个命令之后清除输入缓冲区(我不认为它确实如此,但它可能是这样),这将失败。
撰写expect脚本
使用您喜欢的编程语言并使用Telnet协议来控制CPAN shell;因为这是关于Perl的,所以你可以使用Perl的Net::Telnet
模块。
由于CPAN shell是用Perl编写的,我想你也可以使用CPAN模块中已有的功能在Perl中完全编写完整的东西。我将首先查看要研究的CPAN模块的源代码,以及如何在Perl中处理命令(例如conf
)。毕竟,CPAN shell只是该模块的功能之一,虽然这当然是人们通常使用的。
答案 1 :(得分:0)
使用bash
here documents。您的脚本将如下所示:
#!/bin/bash
perl -MCPAN -e shell <<END_OF_CPAN_COMMANDS
o conf make_arg -I/"$PWD"
o conf make_install_arg -I/"$PWD"
END_OF_CPAN_COMMANDS
您可以在最终END_OF_CPAN_COMMANDS
之前添加更多命令。