我有这个bash脚本:
python python_scripts/concat_merlin_feats.py $out_mgc_data_text $one_file_merlin_feats
copy-feats ark,t:$one_file_merlin_feats ark,scp:$out_dir/mgc_data/feats.ark,$out_dir/mgc_data/feats.scp
rm -f $one_file_merlin_feats
第一个命令在这里运行一个 python 脚本,该脚本带有2个参数,输入文件和输出文件“ $ one_file_merlin_feats”。然后,它将输出文件用作第二个命令的输入,然后将其删除。
我可以修改此脚本,以使第一个命令的输出成为第二个命令的输入,而无需将其写在硬桌上吗?
答案 0 :(得分:0)
要使命令在管道中工作,第一个命令必须写入stdout,第二个命令必须从stdin中读取。
某些使用文件名的命令分别将-
解释为标准输入/标准输出:
produce-stuff - | consume-stuff -
如果这不起作用,有时您可以分别传递/dev/stdout
和/dev/stdin
作为文件名:
produce-stuff /dev/stdout | consume-stuff /dev/stdin
或者您的情况:
python python_scripts/concat_merlin_feats.py $out_mgc_data_text /dev/stdout | \
copy-feats ark,t:/dev/stdin ...
但是,如果两个程序中的任何一个都想在文件中“四处寻找”(即,不顺序读取/写入数据而是四处移动),则以上任何一项都不起作用。在这种情况下,您将必须提供真实文件,而不是管道。