Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在bash中调用perl脚本;而";陈述_Bash - Fatal编程技术网

在bash中调用perl脚本;而";陈述

在bash中调用perl脚本;而";陈述,bash,Bash,我想要从bash脚本的while循环中调用perl脚本的帮助。我的脚本摘录如下: touch $OUTPUT_DIR/$OUTPUT_XML_PARSE while read -r LINE; do perl newscript.pl "$LINE" >> $OUTPUT_DIR/$OUTPUT_XML_PARSE done < $OUTPUT_DIR/$OUTPUT_FILENAME_LIST 触摸$OUTPUT\u DIR/$OUTPUT\u XML\u PAR

我想要从bash脚本的while循环中调用perl脚本的帮助。我的脚本摘录如下:

touch $OUTPUT_DIR/$OUTPUT_XML_PARSE

while read -r LINE; do
   perl newscript.pl "$LINE" >> $OUTPUT_DIR/$OUTPUT_XML_PARSE
done < $OUTPUT_DIR/$OUTPUT_FILENAME_LIST 
触摸$OUTPUT\u DIR/$OUTPUT\u XML\u PARSE
而read-r行;做
perl newscript.pl“$LINE”>>$OUTPUT\u DIR/$OUTPUT\u XML\u PARSE
完成<$OUTPUT\u DIR/$OUTPUT\u FILENAME\u列表
文件$OUTPUT\u FILENAME\u LIST包含一个文件名列表,Perl脚本使用每个文件名作为输入参数来打开和修改数据,并将输出写入$OUTPUT\u XML\u PARSE


运行程序时的错误是“无法打开perl脚本”IDOCXML_parse.pl:路径名中的文件或目录不存在。”。perl脚本与bash脚本位于同一目录中,因此我不确定为什么会出现这种情况。请告知。

听起来您是在从/path/to以外的目录调用脚本,如
/path/to/myscript.sh

试一试

另外,bash-while读取循环非常慢。试试这个

xargs -I X -L 1 perl ./IDOCXML_parse.pl X < input.file > output.file
xargs-ix-l1 perl./IDOCXML_parse.pl Xoutput.file

或者重写perl脚本以接受文件名的输入文件,并让perl对其进行迭代。

摆脱使用所有文件名的习惯。有朝一日,您将使用
PATH=…
并中断您的脚本。要了解有关shell变量命名标准的更多信息,请参阅。感谢Glenn,我尝试了不涉及while循环的代码,这导致了错误-“路径名中的文件或目录不存在。at/home/kal/IDOCXML_parse.pl第22行at/home/kal/IDOCXML_parse.pl第22行“,第22行是
$twig->parsefile($ARGV[0])
。如何更改您的语句,使文件名作为参数传递给perl脚本?显然,输入文件中的文件名没有绝对路径。如果可以,请修复此问题。否则,您必须
cd
到包含这些文件的目录,并使用绝对路径调用perl脚本
cd "$(dirname "$0")"
while read ...; do perl ./IDOCXML_parse.pl ...
xargs -I X -L 1 perl ./IDOCXML_parse.pl X < input.file > output.file