首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Bash中读取文件或标准输入

如何在Bash中读取文件或标准输入
EN

Stack Overflow用户
提问于 2011-08-08 17:27:56
回答 13查看 407.9K关注 0票数 285

以下Perl脚本(my.pl)可以从命令行参数中的文件读取,也可以从standard input (STDIN)读取:

代码语言:javascript
复制
while (<>) {
   print($_);
}

perl my.pl将从标准输入读取,而perl my.pl a.txt将从a.txt读取。这非常方便。

在Bash中有没有类似的东西?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-08-13 03:44:50

如果使用文件名作为第一个参数$1调用脚本,则以下解决方案将从文件中读取,否则将从标准输入中读取。

代码语言:javascript
复制
while read line
do
  echo "$line"
done < "${1:-/dev/stdin}"

如果定义了替换${1:-...},则它采用$1。否则,将使用自己进程的标准输入的文件名。

票数 470
EN

Stack Overflow用户

发布于 2013-05-11 04:48:52

也许最简单的解决方案是使用合并重定向操作符来重定向标准输入:

代码语言:javascript
复制
#!/bin/bash
less <&0

标准输入是文件描述符零。上面的代码将通过管道传输到bash脚本的输入发送到less's标准输入。

Read more about file descriptor redirection

票数 139
EN

Stack Overflow用户

发布于 2014-03-27 03:25:27

我认为这是最简单的方法:

代码语言:javascript
复制
$ cat reader.sh
#!/bin/bash
while read line; do
  echo "reading: ${line}"
done < /dev/stdin

--

代码语言:javascript
复制
$ cat writer.sh
#!/bin/bash
for i in {0..5}; do
  echo "line ${i}"
done

--

代码语言:javascript
复制
$ ./writer.sh | ./reader.sh
reading: line 0
reading: line 1
reading: line 2
reading: line 3
reading: line 4
reading: line 5
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6980090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档