如何通过变量的内容扩展管道命令?

如何通过变量的内容扩展管道命令?

我想延长此行调用 /usr/bin/mplayer 来录制音频流

引用脚本record.sh可能会并行调用多次,我需要知道在哪个上下文中错误会记录在错误文件中。

因此,我的问题是:如何更改这一行,以便在每行的开头也"$file"打印变量的内容?

"$mplayer" $playlist $url $mplayerflags -msglevel all=2 -dumpstream -dumpfile "$file"  >/dev/null 2>>"$errors" <&2 &

示例:而不是:

some arbitrary error message0
some arbitrary error message1
some arbitrary error message2

some arbitrary error message3
some arbitrary error message4
some arbitrary error message5

我想拥有:

/home/homedir/recordings/filelocation1.mp3 some arbitrary error message0
/home/homedir/recordings/filelocation1.mp3 some arbitrary error message1
/home/homedir/recordings/filelocation1.mp3 some arbitrary error message2

/home/homedir/recordings/filelocation1.mp3 some arbitrary error message3
/home/homedir/recordings/filelocation1.mp3 some arbitrary error message4
/home/homedir/recordings/filelocation1.mp3 some arbitrary error message5

答案1

你无法通过改变线路来实现这一点;只需在调用 mplayer 之前打印不带换行符的文件名即可。

答案2

例如,您可以通过管道awk为每一行添加文件名前缀:

"$mplayer" "${playlist[@]}" "$url" "${mplayerflags[@]}" \
  -msglevel all=2 -dumpstream -dumpfile "$file"  2>&1 > /dev/null |
  F="$file" awk '{print ENVIRON["F"]": "$0}' >> "$errors" &

笔记:

  • 我已经删除了<&2没有意义的内容。
  • 修复了那些未加引号的参数扩展。在我看来$playlist,它$mplayerflags应该是数组。

相关内容