如何在bash中以编程方式创建输出重定向

问题描述 投票:0回答:1

我正在编写测试脚本,并且其中包含很多重复,并且我正在寻找减少这些代码重复的方法。因此,我认为以编程方式创建命令的重定向部分会很好。

这里是一个最小的示例:(在真实脚本中,我将在x()中生成不同的输出文件名)

#!/bin/bash

set -x

x() {
  echo '> out.txt 2> err.txt'
}

./someProgram $(x)

[我希望是stdout会以out.txt结尾,而stderr会以err.txt结尾。但是bash引用了字符串。因此,结果命令是./someProgram '>' out.txt '2>' err.txt而不是./someProgram > out.txt 2> err.txt

这是示例的输出:

++ x
++ echo '> out.txt   2> err.txt'
+ ./someProgram '>' out.txt '2>' err.txt
.....

所以'>''2>'有可能不会被引用吗?

bash io-redirection
1个回答
0
投票

没有更多上下文很难实现,但是您可能只想明智地使用exec。我不会保证以下内容的可移植性,但是在bash 5.0.16中,您可以执行以下操作:

x() { shift; "$@"; } > $1.out 2> $1.err
x filename ./someProgram

要运行./someProgram,将输出定向到filename.out,并将错误流写入filenmae.err,>

© www.soinside.com 2019 - 2024. All rights reserved.