perl -p -i -e在shell脚本中

#!/usr/bin/env bash DOCUMENT_ROOT=/var/www/html/ rm index.php cd modules/mymodules/ perl -p -i -e 's/x.xx.xx.y/dd.dd.ddd.dd/g' `grep -ril y.yy.yy.y *` 

显示显示警告

 -i used with no filenames on the command line, reading from STDIN. 

它阻止运行其余的脚本。

任何解决scheme

其实我需要跑步

 perl -p -i -e 's/x.xx.xx.y/dd.dd.ddd.dd/g' `grep -ril y.yy.yy.y *` Inside a shell script 

我用docker使用Ubuntu。

让我们一起来看看这一步。 首先,你正在运行这个grep命令:

 grep -ril y.yy.yy.y * 

这recursion地search当前目录中的所有文件和目录。 它在任何情况下都会查找包含string“y.yy.yy.yy”的文件,并返回包含此文本的文件列表。

这个命令将返回一个文件名列表,或者什么都不返回。

不pipe从那个grep命令返回的是什么,然后作为parameter passing给你的Perl命令:

 perl -p -i -e 's/x.xx.xx.y/dd.dd.ddd.dd/g' [list of filenames] 

如果grep返回一个文件列表,则这里的-p选项意味着列表中每个文件中的每一行(依次)都会遍历该replace,然后打印到一个新文件。 -i表示每个旧文件都有一个新文件,新文件的名称与旧文件相同(命令运行后旧文件将被删除)。

到现在为止还挺好。 但是如果grep没有返回任何文件名会发生什么? 在这种情况下,你的Perl命令没有得到任何文件名,这会触发你所看到的错误。

所以我的(第二个)猜测是你的grep命令没有做你想做的事情,并返回一个空的文件名列表。 尝试运行自己的grep命令,看看你得到什么。