我要用bash编写脚本,我想从另一个应用程序读取输出,并要求用户采取行动。
psql -c "SELECT userid, name FROM my_table"|
while read userid name
do
do_something $userid $name
done
在功能do_something里面我想问“你确定等”。但它对我不起作用。
答案 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的标准语法。