在bash中以半交互方式从用户读取多个项目 [英] reading multiple items semi-interactively from the user in bash

查看:16
本文介绍了在bash中以半交互方式从用户读取多个项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在一个外壳脚本中读取用户的多个项目,但没有成功。其目的是首先读取文件列表(从stdin管道读取),然后再读取两次以交互获得两个字符串。我要做的是读取要在电子邮件中附加的文件列表,然后是主题,最后是电子邮件正文。

到目前为止,我得到的是:

photos=($(< /dev/stdin))

echo "Enter message subject"
subject=$(< /dev/stdin)

echo "Enter message body"
body=$(< /dev/stdin)

(加上为简洁起见而省略的错误检查代码)

但是,这会得到一个空的主题和正文,可能是因为第二个和第三个重定向获得了EOF。

我一直在尝试使用<;&;等命令关闭和重新打开stdin,但似乎不是这样。

我甚至尝试对文件列表使用分隔符,使用";While;Read line";循环,并在检测到分隔符时退出循环。但这也不起作用(??)。

有什么办法可以建造这样的东西吗?

推荐答案

# Prompt and read two things from the terminal (not from stdin), then read stdin.
# The last line uses arrays, so is BASH-specific.  The read lines are portable.
# - Ian! D. Allen - idallen@idallen.ca - www.idallen.com
read -p "Enter message subject: " subject </dev/tty
read -p  "Enter message body: " body </dev/tty
photos=($(</dev/stdin))

这篇关于在bash中以半交互方式从用户读取多个项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆