在 bash 中将一个命令替换到另一个命令的参数列表中
Substituting a command into the parameter list of another command in bash
我有一个 bash 脚本,通常是这样工作的:
[...]
file=
docommand $x $y $file $z
但我想向脚本添加一个选项,告诉它使用 anonymous named pipe 而不是文件从命令中获取数据。 也就是说,我想做一些近似于
的事情
file=<(anothercmd arg1 arg3)
还有我的
docommand $x $y $file $z
扩展到
docommand $x $y <(anothercmd arg1 arg3) $z
有没有办法获得正确的引用来实现这一点?
对于更具体的上下文,脚本查看回归测试的输出产品,通常将它们与具有预期输出的文件区分开来。我想有选择地将修订和差异传递给当时预期的结果,因此 diff $from $to
将扩展为 diff <(hg cat -r $fromrev $from) $to
.
使用评估:
eval docommand $x $y <(anothercmd arg1 arg3) $z
例子
$ f='<(ps)'
$ echo $f
<(ps)
$ cat $f
cat: '<(ps)': No such file or directory
$ eval cat $f
PID TTY TIME CMD
4468 pts/8 00:00:00 mksh
4510 pts/8 00:00:00 bash
4975 pts/8 00:00:00 bash
4976 pts/8 00:00:00 cat
4977 pts/8 00:00:00 ps
$
我有一个 bash 脚本,通常是这样工作的:
[...]
file=
docommand $x $y $file $z
但我想向脚本添加一个选项,告诉它使用 anonymous named pipe 而不是文件从命令中获取数据。 也就是说,我想做一些近似于
的事情file=<(anothercmd arg1 arg3)
还有我的
docommand $x $y $file $z
扩展到
docommand $x $y <(anothercmd arg1 arg3) $z
有没有办法获得正确的引用来实现这一点?
对于更具体的上下文,脚本查看回归测试的输出产品,通常将它们与具有预期输出的文件区分开来。我想有选择地将修订和差异传递给当时预期的结果,因此 diff $from $to
将扩展为 diff <(hg cat -r $fromrev $from) $to
.
使用评估:
eval docommand $x $y <(anothercmd arg1 arg3) $z
例子
$ f='<(ps)'
$ echo $f
<(ps)
$ cat $f
cat: '<(ps)': No such file or directory
$ eval cat $f
PID TTY TIME CMD
4468 pts/8 00:00:00 mksh
4510 pts/8 00:00:00 bash
4975 pts/8 00:00:00 bash
4976 pts/8 00:00:00 cat
4977 pts/8 00:00:00 ps
$