在一个while循环中读取bash中的input
我有一个bash脚本,就像下面的东西,
cat filename | while read line do read input; echo $input; done
但是这显然没有给我正确的输出,因为当我在while循环中读取时,由于可能的I / Oredirect,它尝试从文件的文件名中读取数据。
还有其他的方法吗?
从控制terminal设备读取:
read input </dev/tty
更多信息: http : //compgroups.net/comp.unix.shell/Fixing-stdin-inside-a-redirected-loop
你可以通过单元3redirect常规标准input,以保持它在pipe道内:
{ cat notify-finished | while read line; do read -u 3 input echo "$input" done; } 3<&0
顺便说一句,如果你真的用这种方式使用cat
,用redirect代替它,事情变得更加容易:
while read line; do read -u 3 input echo "$input" done 3<&0 <notify-finished
尝试改变这样的循环:
for line in $(cat filename); do read input echo $input; done
unit testing:
for line in $(cat /etc/passwd); do read input echo $input; echo "[$line]" done
它看起来像你读了两次,while循环内的读取是不需要的。 另外,您不需要调用cat命令:
while read input do echo $input done < filename
echo "Enter the Programs you want to run:" > ${PROGRAM_LIST} while read PROGRAM_ENTRY do if [ ! -s ${PROGRAM_ENTRY} ] then echo ${PROGRAM_ENTRY} >> ${PROGRAM_LIST} else break fi done