#!/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.
它可以防止运行其余的脚本。
任何解决方案?
其实我需要运行
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。
答案 0 :(得分:4)
让我们一步一步看看这一步。首先,您正在运行此grep
命令:
grep -ril y.yy.yy.y *
以递归方式搜索当前目录中的所有文件和目录。它查找包含字符串" y.yy.yy.yy"的文件。在任何情况下,都会返回包含此文本的文件列表。
此命令将返回文件名列表或不返回任何内容。
然后从grep
命令返回的任何内容作为参数传递给Perl命令:
perl -p -i -e 's/x.xx.xx.y/dd.dd.ddd.dd/g' [list of filenames]
如果grep
返回文件列表,那么这里的-p
选项意味着列表中每个文件中的每一行(依次)通过该替换运行,然后打印到新文件。 -i
表示每个旧文件都有一个新文件,新文件的名称与旧文件相同(命令运行后删除旧文件)。
到目前为止一切顺利。但是如果grep
没有返回任何文件名,会发生什么?在这种情况下,您的Perl命令不会获取任何文件名,并且会触发您看到的错误。
所以我的(第二个)猜测是你的grep
命令没有做你想要的,并且返回一个空的文件名列表。尝试单独运行grep
命令,看看你得到了什么。