如果我想做这样的事情
perl abc.pl > xyz.html
我应该使用什么命令,以便将xyz.html存储到变量中。我不允许更改上面的任何内容,除了html文件的名称
答案 0 :(得分:0)
根据你的评论,你可以做到这一点,但它非常难看:
file=$(history | awk '/perl.*>/&& !/history/ {x=$NF} END{print x}')
echo $file
基本上它运行history
命令向shell询问最近运行的命令列表。然后,它使用awk
查找包含perl
和>
的所有内容。当它找到一个时,它会在变量x
中保存行上的最后一个单词(可能是您重定向到的文件名),然后在结尾处打印出任何Perl脚本重定向到的最后一个文件名。丑陋但功能齐全。
HOWTO使用上述方法调试问题......
要调试上面的脚本,首先尝试自己的history
命令
history
它应该为您提供已键入的所有命令的列表。现在尝试awk
,
awk 'BEGIN{print "Hello"; exit}'
Hello
如果不起作用,请尝试此
awk "BEGIN{print 7; exit}"
并继续尝试,直到让awk
工作,看看引用如何在Cygwin上运行。
然后你应该做什么
history | awk '/perl/{print}'
查看您运行的所有perl程序,很快您就会知道如何在本答案开始时运行我建议的代码。
或者,你可以这样做,这是很多清洁......
OUTFILE=xyz.html
perl abc.pl > $OUTFILE
perl def.pl $OUTFILE
原始回答
Perl完全没有意识到它正在写入xyz.html
,它只知道它正在写入stdout
并且shell在没有Perl知识的情况下指向xyz.html
。
如果您只是为进程的下一部分保存文件,为什么不直接使用管道将第一个程序的输出发送到第二个程序,如下所示:
perl abc.pl | perl secondProgram
然后第二个程序可以从其stdin
而不是文件中读取。此方法的优点是无需创建临时文件。