shell – 在bourne脚本中重定向stdin之后获取用户输入
发布时间:2020-12-15 21:02:30 所属栏目:安全 来源:网络整理
导读:(这间接是一个更大的家庭作业的一部分) 我有类似的东西 while read LINE do stuff-done-to-$LINE echo "Enter input:" read INPUT stuff-done-to-$INPUT done lt infile 我找不到使用console / default stdin进行第二次读取的成功方法,而不是重定向的stdin.
(这间接是一个更大的家庭作业的一部分)
我有类似的东西 while read LINE do stuff-done-to-$LINE echo "Enter input:" read INPUT stuff-done-to-$INPUT done < infile 我找不到使用console / default stdin进行第二次读取的成功方法,而不是重定向的stdin. 需要纯粹的bourne脚本. 解决方法
我相信Bourne shell支持这个:
exec 3<doc.txt while read LINE <&3 do stuff-done-to-$LINE # the next two lines could be replaced by: read -p "Enter input: " INPUT echo "Enter input:" read INPUT stuff-done-to-$INPUT done < infile 输入在文件和用户之间交替.实际上,这是从文件中发出一系列提示的简洁方法. 这会将文件“infile”重定向到第一个读取输入的文件描述符号3.文件描述符0是stdin,1是stdout,2是stderr.您可以使用其他FD. 我已经在Bash和Dash上测试了这个(在我的系统上sh符号链接到破折号). 当然有效.这里有一些更有趣的事情: exec 3<doc1.txt exec 4<doc2.txt while read line1 <&3 && read line2 <&4 do echo "ONE: $line1" echo "TWO: $line2" line1=($line1) # convert to an array line2=($line2) echo "Colors: ${line1[0]} and ${line2[0]}" done 这将交替打印两个文件的内容,丢弃任何文件较长的额外行. ONE: Red first line of doc1 TWO: Blue first line of doc2 Colors: Red and Blue ONE: Green second line of doc1 TWO: Yellow second line of doc2 Colors: Green and Yellow Doc1只有两行.第二行和后续的doc2行被丢弃. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |