热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在包装bash脚本中设置管道

如何解决《在包装bash脚本中设置管道》经验,为你挑选了1个好方法。

假设我有一个我调用的python程序

python main.py

我想将这个程序包装成一个调用的shell脚本execute,可以事先做一些设置

#!/bin/bash

# Do something interesting
python main.py

现在让我们说我想使用管道

./execute  outputData.txt

我应该如何将这些管道(或|管道)重定向到我的python脚本?

像下面的东西,但更通用(我不知道我的输入和输出文件的名称,或者是否有管道,也许我只是想要stdin/stdout)

python main.py  outputData.txt

一个快速的黑客就是让我的python可执行文件运行而不是将它包装在shell脚本中,但我更感兴趣的是学习管道.



1> cxw..:

在这种特殊情况下,您不必在shell脚本中指定管道或重定向.管道和重定向更改标准输入,输出和错误句柄.除非您另有说明,否则这些句柄将由子进程继承.因此,当您运行时execute ,两者的标准输入句柄executepython它执行的标准输入句柄将被连接到input.txt.execute如果要更改execute设置的调用者,您只需要在里面指定重定向或管道.

术语注释:<,>>>重定向运算符,而不是管道.只是|一个管道.机制类似,但管道要求shell执行新进程.

编辑我不知道脚本获取与其stdin/stdout/stderr句柄关联的文件名的任何方式.在管道的情况下,没有这样的文件名!

此外,bash有一个进程替换功能,它是管道和重定向的混合. execute <<(echo yes)将运行echo yes,并将其输出放在一个特殊的文件名(例如/dev/fd/42).特殊文件名在命令行中.所以结果是这样的echo yes > /dev/fd/42 ; execute .当您不想创建新的子shell时,这很有用|.


@AndreiCioara没有一个愚蠢的问题:).实际上,通常很难找到像"你不需要做任何特殊事情"这样的答案,因为文档通常会告诉你默认行为而不解释它如何适用于不同情况.快乐的黑客!
推荐阅读
author-avatar
趣校区导购网
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有