Raz*_*een 2 linux bash shell perl docker
#!/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 *`
Run Code Online (Sandbox Code Playgroud)
显示 显示警告
-i used with no filenames on the command line, reading from STDIN.
Run Code Online (Sandbox Code Playgroud)
它阻止运行其余脚本。
有什么解决办法吗?
其实我需要跑步
perl -p -i -e 's/x.xx.xx.y/dd.dd.ddd.dd/g' `grep -ril y.yy.yy.y *`
Inside a shell script
Run Code Online (Sandbox Code Playgroud)
我正在使用 ubuntu 和 docker。
让我们一步一步来看看。首先,您运行以下grep
命令:
grep -ril y.yy.yy.y *
Run Code Online (Sandbox Code Playgroud)
这会递归搜索当前目录中的所有文件和目录。在任何情况下,它都会查找包含字符串“y.yy.yy.yy”的文件,并返回包含此文本的文件列表。
该命令将返回文件名列表或不返回任何内容。
该命令返回的任何内容grep
都会作为参数传递给 Perl 命令:
perl -p -i -e 's/x.xx.xx.y/dd.dd.ddd.dd/g' [list of filenames]
Run Code Online (Sandbox Code Playgroud)
如果grep
返回文件列表,则-p
此处的选项意味着列表中每个文件中的每一行(依次)运行该替换,然后打印到新文件。这-i
意味着每个旧文件都有一个新文件,并且新文件的名称与旧文件相同(命令运行后旧文件将被删除)。
到目前为止,一切都很好。但是如果grep
不返回任何文件名会发生什么?在这种情况下,您的 Perl 命令不会获取任何文件名,这将触发您所看到的错误。
所以我的(第二个)猜测是您的grep
命令没有执行您想要的操作,并且返回一个空的文件名列表。grep
尝试单独运行该命令,看看会得到什么。
归档时间: |
|
查看次数: |
1206 次 |
最近记录: |