首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何代替fd1 / fd2将fd 3输送到用户

如何代替fd1 / fd2将fd 3输送到用户
EN

Unix & Linux用户
提问于 2019-08-26 05:59:57
回答 3查看 2K关注 0票数 1

我希望做这样的事:

代码语言:javascript
复制
echo 'foo' >&3  3|  cat

基本上,我想将'foo‘写到3,然后只将3中的数据输送到cat。但上面的话行不通,我明白:

代码语言:javascript
复制
bash: 3: Bad file descriptor

有人知道我想做什么吗?

关于Node.js,我有一个工作示例,这里是:https://gist.github.com/ORESoftware/0ad178f4512bbf956e54dd08f2412883

在这个看似可靠的Node.js gist中,我们在命令行中这样做:

代码语言:javascript
复制
node foo.js 3> some-file.sh

在节点过程中,我们将写入3文件描述符。

但我想知道如何使用管道而不是重定向。

就像这样:

代码语言:javascript
复制
node foo.js 3|  cat
EN

回答 3

Unix & Linux用户

发布于 2019-08-26 07:15:52

您可以不使用流程替换,也不需要混合fd 1和3或fd 1和2:

代码语言:javascript
复制
producer(){ echo to_out; echo >&2 to_err; echo >&3 to_fd3; }
consumer(){ sed "s/^/consumer $@: /" >/dev/tty; }

{ producer 3>&1 >&4 | consumer 3; } 4>&1 | consumer 1
to_err
consumer 1: to_out
consumer 3: to_fd3

{ producer 3>&1 >&4 | consumer 3; } 4>&1
to_out
to_err
consumer 3: to_fd3
票数 4
EN

Unix & Linux用户

发布于 2019-08-26 06:02:49

不完全是通过工艺替代而成的管道:

代码语言:javascript
复制
# cmd 3> >(cat)

或者,如果您可以混合fd3和stdout的输出,

代码语言:javascript
复制
# cmd 3>&1 | cat
票数 0
EN

Unix & Linux用户

发布于 2019-08-26 06:12:27

因此,对于bash,这是有效的:

代码语言:javascript
复制
exec 3<> >(cat > temp.sh)
echo a >&3 # write to it
exec 3>&- # close fd 3.

但我想知道是否有一种不那么冗长的方法来做到这一点。而不用过程替代,而不用管道。

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

https://unix.stackexchange.com/questions/537426

复制
相关文章

相似问题

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