在bash循环中读取响应

时间:2016-07-19 14:05:05

标签: linux bash shell

我要用bash编写脚本,我想从另一个应用程序读取输出,并要求用户采取行动。

psql -c "SELECT userid, name  FROM my_table"|
while read userid name
do 
    do_something  $userid $name
done

在功能do_something里面我想问“你确定等”。但它对我不起作用。

2 个答案:

答案 0 :(得分:0)

  

从另一个应用程序读取输出

ls -1 | while read i; do echo "$i" ; done

ls -1,与输出一样 |重定向输出
read,获取输出并输入i
"$i",现在你可以打印出来了

现在,在while内,您可以执行任何操作,例如调用函数或其他内容

读:
read --help

as script:

for i in $(ls -1)
do
    echo -n "Are you sure (y/n)?" && read ans
    if  [ $ans == "y" ];then
        echo $i
    fi

done

答案 1 :(得分:0)

这应该有所帮助:(逻辑从this answer复制)

while read userid name <&3
do 
    do_something  $userid $name
done 3< <(psql -c "SELECT userid, name  FROM my_table")

说明:
当您运行command | while read循环时,整个while循环的stdin将从进程输出重定向。因此,在while循环内运行的任何read -p "Continue? [y/n]" response也将具有重定向的stdin。你希望它来自终端。

解决方案:仅在stdin行重定向read命令while read。上面的代码创建了一个额外的文件描述符#3,从psql命令的输出重定向。

<(command)process substitution的标准语法。