首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在bash中插入文件描述符3的输出

在bash中插入文件描述符3的输出
EN

Stack Overflow用户
提问于 2017-07-01 20:45:05
回答 2查看 1.1K关注 0票数 1

我用ruby编写了一个名为citeselect的程序,它使用诅咒动态地从bibtex目录中选择引用。我想把这个程序放在一个管道里,用这个程序的输出简单地引用任何东西。不幸的是,正如我从Ncurses和linux管道(c)中发现的那样,Curses使用stdout来显示它。

因此,当输出作为输出提供时,我已经将输出引用键路由到文件描述符3中。我已经证实了它是有效的:

citeselect 3>output

有没有办法在bash中的一个班轮中捕获发送给fd3的输出?有点像

echo "The citation key is $(citeselect 3>)"

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-02 13:03:34

以胜利的答案为起点,在尝试了输出重定向之后,我意识到我对n>&m做了什么有错误的想法。这份指南对我帮助很大:

http://mywiki.wooledge.org/BashFAQ/002

为此,我必须将stdout重定向到stderr,然后将fd3重定向到stdout,如下所示:

CITATION=$(citeselect 3>&1 1>&2)

这样的话,诅咒仍然可以通过stderr流使用tty,而我仍然可以使用引文输出。在我早些时候的许多尝试中,我的重定向论点被推翻了,因为他们对他们所做的事情产生了根本的误解。

票数 1
EN

Stack Overflow用户

发布于 2017-07-01 21:17:08

不错的问题,更好的方法是使用exec命令将stdout文件描述符替换为另一个数字:

代码语言:javascript
复制
#!/usr/bin/env bash

exec 3>&1             # 1 is stdout, 3 is the fd to assign stdout to

exec > outputfile.txt # every command executed within this location 
                      # to where the fd was closed and replaced back 
                      # to it's formal value will be sent to outputfile.txt


citselect

exec 1>&3 3>&-        # the fd of stdout is replaced back to 1 and reset

将此文件放入您的${HOME}/bin/usr/bin/文件夹并执行它,而不是直接调用citeselect

有关这方面的更多信息,请查看高级击打指南,但在某些情况下,您应该避免使用指南作为参考。

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

https://stackoverflow.com/questions/44865266

复制
相关文章

相似问题

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