我有点陷入用于查找和删除某些文件的脚本中。我想让用户有机会迭代列表并仅在人工批准后删除每个文件。
但是,我发现脚本跳过了用户交互并且不删除。
cat $fileToBeDeleted | while read in; do
rm -i "$in"
echo "deleted: $in"
done;
尝试使用
rm
的完整路径进行 for 循环,例如:
#!/bin/bash
for i in ./*
do /bin/rm -i "$i"
done
我怀疑“rm -i”输出询问是否删除文件的消息后, 它尝试从“stdin”读取用户的响应(“y”或“n”),其中(在中间) 脚本的)是脚本本身。尽管它实际上只需要一个字符 回复,“rm -i”似乎通读了脚本的整个剩余部分,以便 然后脚本提前终止。解决办法是告诉“rm -i”直接读取 从终端而不是从“stdin”:
rm -i "$whatever" </dev/tty
您可以使用 if 语句在删除文件之前要求确认,而不是使用
rm -i
。在此示例中,我使用了一个文本文件 (to_delete_list.txt),其中包含我将要删除的文件列表。
read -u 1 answer
将让您在循环中请求用户输入。
#!/bin/bash
while IFS= read -r file; do
echo "do you want to delete $file (y/n)?"
read -u 1 answer
if [[ $answer = y ]]
then
rm $file
echo "deleted: $file"
else
continue
fi
done < "to_delete_list.txt"