#!/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。
最佳答案
让我们一步一步地看这个。首先,您运行此 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
命令,看看会得到什么。
关于linux - shell 脚本内的 perl -p -i -e,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45839283/