我想我在这里推动了bash的限制,但是我真的想要完成这个工作而不必重新编写整个脚本。bash文件逐行读取;同时允许交互式stdin?
我有一些动态的东西是我想要对其执行操作的文件对列表。我还想在继续执行任何任务之前提示。
它看起来像这样:
diff -rq $dir1 $dir2 | \
sed -ne 's/^Files \(.*\) and \(.*\) differ$/\1 \2/p' | \
while read differingfilepair; do
...
printf "Continue? (Y/n)"
read -n1 cont
done
正如你可以在这里看到的while read line
块似乎充当某种形式的接收标准输入的数据内容的子shell的。
的$cont
变量基本上只是吸食该数据的每一行的第一个字符(在该对中diff
报道为不同的文件的第一文件的路径中的第一个字符),它不连接到该终端。
有没有办法做我想在这里做的事情?我想一个解决方法是使用临时文件,但有另一种方式吗?
编辑:使用以后加载到while read
块像这样的临时文件:while read l; do ...; done < .tmp_file
仍然接管标准输入! (虽然我认为this answer会帮助)
是的,似乎是这个问题的文件描述符重定向方法的等式的一部分...虽然这是有点超越我。我最终利用了数据的结构性,并通过简化列表并使内部循环跟踪状态。在'cat file'中使用'for file''' –