Linux/bash 管道和重定向

标签 linux bash shell unix

我有一个来自《unix/linux 你的终极指南》一书中的问题

假设有一个名为“prog”的程序,它在 stderr 和 stdout 上都有输出。给出一个使用“o”选项运行“prog”的命令,并将字符串“arg”作为其唯一参数传递,它从程序“progBefore”的输出中获取其标准输入,其中“prog”的标准输出被忽略,“prog”的标准错误通过“progAfter”的标准输入赋予程序“progAfter”。不要使用任何临时文件。

这是我尝试过的:

prog -o 'arg' < `progBefore` 1>/dev/null 2> progAfter

如有任何帮助,我们将不胜感激,谢谢

最佳答案

这是在做什么?

prog -o 'arg' < progBefore 1>/dev/null 2> progAfter

它正在调用程序prog,从文件progBefore获取输入,将stdout传递到/dev/null(忽略它)并将stderr传递到文件 progAfter。当您应该使用管道时,您正在使用文件重定向:

progBefore | prog -o 'arg' 2>&1 1>/dev/null | progAfter

| 指示的管道(更准确地说,匿名管道)从左侧程序中获取stdout,并将其发送到右侧程序的stdin

2>&1stderr 重定向到 stdout 指向的任何内容,请注意顺序很重要。

关于Linux/bash 管道和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52454379/

相关文章:

对一个衬垫进行 shell 处理以添加到文件中

linux - 是否可以从 main.bash 运行特定函数,而函数存在于 functions.bash 脚本中

macos - 从组 Mac Os X (El Capitan) 中删除用户

java - shell/bash 对接口(interface)输入规模的处理有多好?

linux - bash 没有正确解析 (cat + grep)

c - 在windows机器上读取linux机器生成的二进制文件

bash - 如何通过变量传递文件名以供awk读取

linux - 随机文件夹名称在终端提示之前

android - 有谁知道 'top' 命令 's result' 在android中的含义?

linux - 为什么我的 Makefile 变量在使用 tr 后不稳定?