我有一个文本文件(lst.txt),每行包含一对逗号分隔的名称:
action_type(1, 2, 3)
和脚本(sct.sh):
file1,file2
file3,file4
file5,file6
...
我跑了这个:
i=1
while read inp
do
echo " -- Line $((i++))"
file1=`echo $inp | sed -e "s/,.*$//g"`
file2=`echo $inp | sed -e "s/^.*,//g"`
##### select block
select fname in "$file1" "$file2"
do
case $fname in
$file1) echo -e "Delete $file1.\n";;
$file2) echo -e "Delete $file2.\n";;
esac
break
done
##### select block ends
done
现在的问题是:
$cat lst.txt | ./sct.sh
1. it would not wait for my reply;
2. some input lines get dropped (but if the select block is
commented out, all lines are there).
在这里提供read
回复?如何使这个脚本工作?
答案 0 :(得分:5)
两件事。
首先,您可以使用sd
变量将$IFS
分隔为read
分隔的字段。
其次,您需要明确地从,
读取select
,以防止它读取您的所有标准输入:
/dev/tty
答案 1 :(得分:0)
还要看看percol,fzy,smenu和朋友。他们很乐意从stdin中获取,提供一个用户友好的选择菜单和交互式过滤器,然后再选择管道。