Bash 循环中的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 但是我得

我在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
但是我得到了错误“错误替换”。

在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