Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
Linux 如何将Bash循环变量传递给Perl?_Linux_Bash_Perl_Centos - Fatal编程技术网

Linux 如何将Bash循环变量传递给Perl?

Linux 如何将Bash循环变量传递给Perl?,linux,bash,perl,centos,Linux,Bash,Perl,Centos,我试图使用下面的脚本替换许多文件中的字符串,但我无法将I的值传递给perl,因为下面传递的是文件夹中的第一个文件名 for i in `ls | awk -F".conf" '{print $1}'` do export i /usr/bin/perl -p -i -w -e 's/error_log \/dev\/null crit;/error_log \/var\/log\/nginx\/$ENV{i}_error error;\n/g;' * done 如果您有任何建议,我们将不

我试图使用下面的脚本替换许多文件中的字符串,但我无法将
I
的值传递给
perl
,因为下面传递的是文件夹中的第一个文件名

for i in `ls | awk -F".conf" '{print $1}'`
do
export i

/usr/bin/perl -p -i -w -e 's/error_log \/dev\/null crit;/error_log \/var\/log\/nginx\/$ENV{i}_error error;\n/g;' *


done

如果您有任何建议,我们将不胜感激。

谢谢。您可以将其作为命令行参数传递。注意迭代配置文件的正确方法

for i in *.conf; do
    f=${i%.conf}
    perl -piwe 's|error_log /dev/null crit;|error_log /var/log/nginx/$ARGV[0]_error error;\n|g;' "$f"
done

您可以将其作为命令行参数传递。注意迭代配置文件的正确方法

for i in *.conf; do
    f=${i%.conf}
    perl -piwe 's|error_log /dev/null crit;|error_log /var/log/nginx/$ARGV[0]_error error;\n|g;' "$f"
done

问题不在于bash代码只传递文件夹中的第一个文件

循环实际上会通过所有文件名,但是Perl命令中的替换只在第一次调用时匹配


在第一次迭代中,替换所有出现的字符串
error\u log/dev/null crit所有文件中的其他内容编写>。此后不再出现
错误\u log/dev/null crit,因此第二次和后续迭代无法进行任何更改。

问题不在于bash代码只传递文件夹中的第一个文件

循环实际上会通过所有文件名,但是Perl命令中的替换只在第一次调用时匹配


在第一次迭代中,替换所有出现的字符串
error\u log/dev/null crit所有文件中的其他内容编写>。此后不再出现
错误\u log/dev/null crit无法找到,因此第二次和后续迭代无法进行任何更改。

当您可以将变量附加到要传递给Perl的字符串参数时,为什么要导出?@amine.ahd您能解释更多吗?我尝试不导出,但值为空!请记住:/usr/bin/perl-p-i-w-e的/error\u log\/dev\/null crit/错误\u log\/var\/log\/nginx\/${i}\u错误\不适用*为什么不在perl中完成这一切?您是否尝试打印
$i
的值以确保它不是空的?当您可以将变量附加到要传递给perl的字符串参数时,为什么要导出?@amine.ahd您能解释更多吗?我尝试不导出,但值为空!请记住:/usr/bin/perl-p-i-w-e的/error\u log\/dev\/null crit/错误\u log\/var\/log\/nginx\/${i}\u错误\不适用*为什么不在perl中完成这一切?您是否尝试打印
$i
的值以确保它不是空的?