首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将stdin重定向到bash中的文件

如何将stdin重定向到bash中的文件
EN

Stack Overflow用户
提问于 2016-03-30 15:38:26
回答 6查看 42.3K关注 0票数 20

考虑下面这个非常简单的bash脚本:

代码语言:javascript
运行
复制
#!/bin/bash
cat > /tmp/file

它会将你的管道重定向到一个文件中。例如:

代码语言:javascript
运行
复制
echo "hello" | script.sh

"hello“将出现在文件/tmp/file中。这很管用..。但似乎应该有一种不使用"cat“的本地bash方式来实现这一目的。但我搞不懂。

注意:

  1. 一定是在剧本里。我希望脚本在之后对文件内容进行操作。
  2. 它必须在一个文件中,在我的例子中,后面的步骤涉及一个只从文件中读取的工具。
  3. 我已经有了一种很好的方法来做这件事--只是它看起来像是一个黑客。有本土化的方式吗?比如"/tmp/file <0“或"0> /tmp/file”。我以为bash会有一个本地语法来做这个..。
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-03-30 15:46:44

我不认为有从stdin到EOF的内置内容,但您可以这样做:

代码语言:javascript
运行
复制
#!/bin/bash
exec > /tmp/file
while IFS= read -r line; do
  printf '%s\n' "$line"
done
票数 5
EN

Stack Overflow用户

发布于 2017-08-01 17:28:38

你可以简单地

代码语言:javascript
运行
复制
cp /dev/stdin  myfile.txt

终止您的输入与Ctrl+D或Ctrl+Z和,中提琴!您可以使用stdin中的文本创建文件。

票数 46
EN

Stack Overflow用户

发布于 2016-03-30 16:27:56

另一种使用纯BASH的方法:

代码语言:javascript
运行
复制
#!/bin/bash

IFS= read -t 0.01 -r -d '' indata

[[ -n $indata ]] && printf "%s" "$indata" >/tmp/file

IFS=-d ''导致将所有stdin数据读入变量indata中。

在没有输入管道的情况下调用此脚本时,使用-t 0.01**:**的原因,则read将在可忽略的0.01秒延迟后超时。如果输入中有可用的数据,则将在indata变量中读取数据,并将其重定向到>/tmp/file

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36313562

复制
相关文章

相似问题

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