加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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 &lt 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行被丢弃.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读