如何在不使用临时文件的情况下在子进程中实现延迟的stdout?

埃戈尔·斯克里普图诺夫

我有一个程序(middle叫它),无法修改。
该程序执行以下步骤序列:

  • middle向stdout发送一些文本(echo Text1
  • middle调用inner.sh将一些文本字符串(小于等于4 KB)作为参数(inner.sh "Deferred Message")的Shell脚本
  • middle向stdout发送一些文本(echo Text2

我的任务是创建两个bash脚本,outer.shinner.shmiddle进程生成的所有其他消息之后排列延迟的消息
结果标准输出必须是以下内容:

Text1
Text2
Deferred Message

要求:

  • outer.sh应该调用middlemiddle并将调用inner.sh)。
  • inner.sh 必须在某处记住其参数(延迟的消息)
  • 之后middle被终止,outer.sh必须回顾推迟的消息,并打印到stdout
  • 将会有许多outer.sh进程同时运行。延迟的消息必须存储在当前outer.sh流程实例本地的位置
  • 禁止在文件系统中创建临时对象。(是否可以将延迟的消息存储在内存中的某个位置?)

内部.sh

# Where should I save message "$1"?

外.sh

middle "$@"
# How should I recall and print the deferred message?

我应该将延迟的消息保存在子进程中的什么位置,以及如何在父进程中将其读回?

斯蒂芬·查泽拉斯

inner.sh 可能:

printf '%s\n' "$1" >&3

在中outer.sh,您可以执行以下操作:

{ inner=$(middle "$@" 3>&1 >&4 4>&-); } 4>&1
printf '%s\n' "$inner"

内部文本通过管道(在命令替换中)传递,并存储在shell变量中。假设middle在调用之前没有关闭fd 3 inner.sh(尽管没有理由这样做)。

解释:

  • { ... } 4>&1在该命令组中,最初,fd 1和4都指向原始stdout。IOW,我们已经将external.sh的stdout复制到fd 4上,以便能够在命令替换中恢复它
  • $(...)在该命令替换中,stdout(fd 1)是管道。这就是命令替换的重点。它想获取命令的输出。但是在这里,我们不需要stdout middle,我们想要它(或更确切地说是它的child inner.sh)在fd 3上写的内容,因此:
  • middle 3>&1 >&4 4>&-:对于middle,我们将fd 3设置为cmdsubst管道,以便将其中的内容inner.sh写入$inner,然后将middle的stdout恢复fd 4保存的原始stdout上。在达到其目的后关闭fd 4,因为middle不需要用它做任何事。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

生成zip流而不使用临时文件

来自分类Dev

如何在没有具有Fabric的本地临时文件的情况下获取远程文件的内容

来自分类Dev

在bash或shell中,如何在不创建临时文件的情况下将一行文本输入为文件?

来自分类Dev

可以在不使用临时文件的情况下覆盖硬链接吗?

来自分类Dev

如何在没有临时文件的情况下将流从Web API传递到Azure Blob存储?

来自分类Dev

如何在Windows中安全地存储临时文件,尤其是在安全入侵防护应用程序阻止TEMP目录的情况下

来自分类Dev

如何在不使用临时文件的情况下在UIWebview中打开受密码保护的PDF / DOC?

来自分类Dev

如何在不使用FormData的情况下在Ajax调用中添加文件数据?

来自分类Dev

如何在不使用按钮的情况下在React中播放音频文件?

来自分类Dev

如何将多行输出从管道传递到bash中的变量?不使用临时文件

来自分类Dev

在不使用临时文件的情况下生成zip流

来自分类Dev

可以使用gulp创建zip文件并在不使用临时文件的情况下上传?

来自分类Dev

如何在不使用IDM下载的情况下在Firefox中查看pdf文件

来自分类Dev

WordPress不使用临时文件夹

来自分类Dev

在不使用临时文件的情况下将输出的前N行移至末尾

来自分类Dev

可以在不使用临时文件的情况下覆盖硬链接吗?

来自分类Dev

如何在卷中查找大/临时文件

来自分类Dev

如何在不更改目录的修改时间戳的情况下删除临时文件?

来自分类Dev

我如何在没有临时文件的情况下在vb.net中执行python?

来自分类Dev

如何在不使用临时文件排序的情况下按sum(:field)进行排序

来自分类Dev

如何在不创建临时文件的情况下在命令行中加入文件?

来自分类Dev

是否可以在不使用临时文件的情况下添加一列并删除双引号?

来自分类Dev

如何使子进程对象将输出保存到临时文件,然后从临时文件中获取值?

来自分类Dev

如何在不使用 fseek 或 stat 的情况下在 C 中获取文件大小?

来自分类Dev

如何在不使用 C++ STL 的情况下在 C 中实现映射概念

来自分类Dev

如何在不使用 position:absolute 的情况下在 css 中实现这种样式?

来自分类Dev

如何在不在 shell 脚本中创建临时文件的情况下计算列的总和?

来自分类Dev

如何在不使用hmac库的情况下在python中实现HMAC?

来自分类Dev

如何在不使用 for 循环的情况下在 R 中实现动态计数?

Related 相关文章

  1. 1

    生成zip流而不使用临时文件

  2. 2

    如何在没有具有Fabric的本地临时文件的情况下获取远程文件的内容

  3. 3

    在bash或shell中,如何在不创建临时文件的情况下将一行文本输入为文件?

  4. 4

    可以在不使用临时文件的情况下覆盖硬链接吗?

  5. 5

    如何在没有临时文件的情况下将流从Web API传递到Azure Blob存储?

  6. 6

    如何在Windows中安全地存储临时文件,尤其是在安全入侵防护应用程序阻止TEMP目录的情况下

  7. 7

    如何在不使用临时文件的情况下在UIWebview中打开受密码保护的PDF / DOC?

  8. 8

    如何在不使用FormData的情况下在Ajax调用中添加文件数据?

  9. 9

    如何在不使用按钮的情况下在React中播放音频文件?

  10. 10

    如何将多行输出从管道传递到bash中的变量?不使用临时文件

  11. 11

    在不使用临时文件的情况下生成zip流

  12. 12

    可以使用gulp创建zip文件并在不使用临时文件的情况下上传?

  13. 13

    如何在不使用IDM下载的情况下在Firefox中查看pdf文件

  14. 14

    WordPress不使用临时文件夹

  15. 15

    在不使用临时文件的情况下将输出的前N行移至末尾

  16. 16

    可以在不使用临时文件的情况下覆盖硬链接吗?

  17. 17

    如何在卷中查找大/临时文件

  18. 18

    如何在不更改目录的修改时间戳的情况下删除临时文件?

  19. 19

    我如何在没有临时文件的情况下在vb.net中执行python?

  20. 20

    如何在不使用临时文件排序的情况下按sum(:field)进行排序

  21. 21

    如何在不创建临时文件的情况下在命令行中加入文件?

  22. 22

    是否可以在不使用临时文件的情况下添加一列并删除双引号?

  23. 23

    如何使子进程对象将输出保存到临时文件,然后从临时文件中获取值?

  24. 24

    如何在不使用 fseek 或 stat 的情况下在 C 中获取文件大小?

  25. 25

    如何在不使用 C++ STL 的情况下在 C 中实现映射概念

  26. 26

    如何在不使用 position:absolute 的情况下在 css 中实现这种样式?

  27. 27

    如何在不在 shell 脚本中创建临时文件的情况下计算列的总和?

  28. 28

    如何在不使用hmac库的情况下在python中实现HMAC?

  29. 29

    如何在不使用 for 循环的情况下在 R 中实现动态计数?

热门标签

归档