【发布时间】:2014-11-18 08:11:22
【问题描述】:
Shell 脚本 sed 错误:
无法查看 /home/xx/htdocs/*/modules/forms/int.php
/bin/rm: 无法删除`/home/xx/htdocs/tmp.26758': 没有这样的文件或目录
我的 shell 脚本出现错误。我不确定这个 for 循环是否有效,它的目的是爬上一个 PHP 文件的大目录树,并在每个 int.php 文件中添加一个函数,并进行一些验证。不要问我为什么这不是集中式/OO,但事实并非如此。我从这里尽可能地复制了脚本:http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/
#!/bin/bash
OLD="public function displayFunction(\$int)\n{"
NEW="public function displayFunction(\$int)\n{if(empty(\$int) || !is_numeric(\$int)){return '<p>Invalid ID.</p>';}"
DPATH="/home/xx/htdocs/*/modules/forms/int.php"
BPATH="/home/xx/htdocs/BAK/"
TFILE="/home/xx/htdocs/tmp.$$"
[ ! -d $BPATH ] && mkdir -p $BPATH || :
for f in $DPATH
do
if [ -f $f -a -r $f ]; then
/bin/cp -f $f $BPATH
sed "s/$OLD/$NEW/g" "$f" > $TFILE && mv $TFILE "$f"
else
echo "Error: Cannot view ${f}"
fi
done
/bin/rm $TFILE
这样的通配符是否有效?我可以像这样检查树上的每个子目录吗?我需要对数组进行预编码并循环吗?我该怎么做呢?
另外,PHP 代码中的 $ 是否完全破坏了脚本?
我很困惑。
【问题讨论】:
-
你确定不想要
init.php而不是int.php吗?否则,可以使用set -vx(或set -x)打开shell 调试功能,查看每个变量使用了哪些值,或者在for f in $DPATH之后添加echo f=$f。如果.../htdocs的子目录下有文件module/forms/int.php,我希望*会扩展。祝你好运。