Bash 循环中的rm-i
我在for循环中有rm-I,但当我运行它时,它会打印问题(“你想删除这个吗?”),但不会停下来让我回答Bash 循环中的rm-i,bash,Bash,我在for循环中有rm-I,但当我运行它时,它会打印问题(“你想删除这个吗?”),但不会停下来让我回答 find .. -name "*.tex" | while read line; do printf "${line%%tex}""aux" | xargs rm -i done 我该如何解决这个问题 另外,我最初也尝试使用exec这样做 find ..-name "*.tex" -exec printf "${{}%%tex}""aux"\; | xargs rm -i 但是我得
find .. -name "*.tex" | while read line; do
printf "${line%%tex}""aux" | xargs rm -i
done
我该如何解决这个问题
另外,我最初也尝试使用exec这样做
find ..-name "*.tex" -exec printf "${{}%%tex}""aux"\; | xargs rm -i
但是我得到了错误“错误替换”。在Linux上:
find .. -name "*.tex" | while read line; do
rm -i "${line%%tex}aux" < /dev/tty
done
两者之间的区别:第一个将始终尝试(可能失败)读取控件tty
。另一个将读取循环外的任何stdin
。尝试此操作
OIFS="$IFS"
IFS='
'
declare -a ar=($(find . -name '*.tex'))
IFS="$OIFS"
for x in "${ar[@]}"
do
rm -i "${x%%tex}aux"
done
如果
find
不是绝对要求,您可以用一个简单的glob替换它:
for f in ../*.tex; do
rm -i ${f%%tex}aux
done
但这并不能解决无法回答的问题,是吗?完全正确,忘记了重要的部分…(我认为有比tty重定向更好的方法,但现在找不到)谢谢Mat,它可以工作。但是
/dev/tty
是“进程控制终端的同义词”(man 4 tty
)。foo
从“文件”whatever
重定向foo
的标准输入。
for f in ../*.tex; do
rm -i ${f%%tex}aux
done