我在Bash中有一系列命令时如何重定向stdin / stdout?

我目前正在执行一个Bash命令(通过Python的subprocess.Popen),该命令正在从stdin读取内容,并执行某些操作并输出到stdout.类似于以下内容

pid = subprocess.Popen( ["-c", "cmd1 | cmd2"],
                       stdin = subprocess.PIPE, 
                       stdout = subprocess.PIPE, 
                       shell =True )
output_data = pid.communicate( "input data\n" )

现在,我要做的是更改它以在同一子shell中执行另一个命令,这将在下一个命令执行之前更改状态,因此我的shell命令行现在(概念上)为:

cmd0; cmd1 | cmd2

在这种情况下,有什么方法可以将输入发送到cmd1而不是cmd0?我假设输出包括cmd0的输出(将为空),然后是cmd2的输出.

cmd0实际上不应从stdin读取任何内容,在这种情况下是否有所不同?

我知道这可能只是一种愚蠢的方式,我正在尝试在cmd0中打补丁,而又不会太大地改变其他代码.就是说,如果有更清洁的方法可以解决这个问题,我很乐意提出建议.

解决方法:

在子shell中执行cmd0和cmd1并将/ dev / null重定向为cmd0的stdin:

(cmd0 </dev/null; cmd1) | cmd2

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...