微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在while循环读取行内读取用户?

我有一个bash文件提示用户input一些参数,如果没有提供,使用认值。 然后脚本继续执行其他一些带有参数的命令。 这工作很好 – 直到最近join没有问题。

在尝试从txt文件中读取NAMES参数时,我添加一个while循环来获取文件中的名称,但我仍然希望提供其余的参数。

但是,一旦我添加了while循环,输出显示get_ans()中的打印提示,并且从不会暂停读取,因此所有认值都将被选中。

我想从文件中读取第一个参数,然后从提示用户读取所有后续文件

文件名保存为递增的数字

如何在bash脚本中模拟两个连续的ENTER键的命令?

在计算文本文件中的列数之后删除

在bash脚本中使用curl并curl:(3)在URL中find非法字符

打开多个选项卡并在shell脚本中执行命令

我通过添加while循环来破解了什么?

cat list.txt | while read line do get_ans "Name" "$line" read NAME < $tmp_file get_ans "Name" "$line" read NAME < $tmp_file done function get_ans { if [ -f $tmp_file ]; then rm $tmp_file PROMPT=$1 DEFAULT=$2 echo -n "$PROMPT [$DEFAULT]: " read ans if [ -z "$ans" ]; then ans="$DEFAULT" fi echo "$ans" > $tmp_file }

(注意:代码不能复制粘贴,请原谅错字。实际代码在main()

我可以在没有挂起主进程的情况下以Java的交互模式运行bash吗?

spawn:在linux脚本中找不到命令

Shell – 如何在第n次出现pipe道后删除特定的string

如何从WSL(Ubuntu)Bash运行Windows可执行文件

如何告诉bash从自定义位置获取gettext .mo文件

您将数据传输到while循环STDIN中。 所以get_ans的read也是从STDIN流中获取数据。

您可以在不同的文件描述符中传输数据,以避免出现问题,并停止使用临时文件

while read -u 9 line; do NAME=$(get_ans Name "$line") done 9< list.txt get_ans() { local PROMPT=$1 DEFAULT=$2 ans read -p "$PROMPT [$DEFAULT]: " ans echo "${ans:-$DEFAULT}" }

直接从终端阅读,而不是从标准输入(假设你在* NIX机器,而不是Windows机器):

while read foo</some/file; do read bar</dev/tty echo "got <$bar>" done

当您在命令行中将一个命令传送到另一个命令时,如:

$ foo | bar

shell将设置它,以便bar的标准输入来自foo的标准输出。 foo发送到标准输出的任何东西都会直接进入标准输入。

在你的情况下,这意味着你的脚本可以读取的唯一东西是cat命令的标准输出,它将包含你的文件内容

而不是在命令行中使用管道,使文件名是您的脚本的第一个参数。 然后打开并读取代码中的文件,并像往常一样从用户那里读取。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐