我正在编写测试脚本,并且其中包含很多重复,并且我正在寻找减少这些代码重复的方法。因此,我认为以编程方式创建命令的重定向部分会很好。
这里是一个最小的示例:(在真实脚本中,我将在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>'
有可能不会被引用吗?
没有更多上下文很难实现,但是您可能只想明智地使用exec
。我不会保证以下内容的可移植性,但是在bash 5.0.16中,您可以执行以下操作:
x() { shift; "$@"; } > $1.out 2> $1.err
x filename ./someProgram
要运行./someProgram
,将输出定向到filename.out
,并将错误流写入filenmae.err
,>