並列コマンド文字列内の置換

並列コマンド文字列内の置換

複数のファイルをダウンロードし、その名前の md5 サムに保存したい:

cat list | parallel -j4 "md5=$(wget -O - {} | tee tmpfile_{#} | md5sum | cut -d ' ' -f 1); mv tmpfile_{#} $md5"

しかし問題は、bashが並列置換の実行前にwgetのものを実行するように見えることです{}...そのため、wgetはダウンロードしようとしますhttp://{}

では、サブコマンドの実行前に parallel はどのようにして変数を置き換えることができるのでしょうか?

答え1

試行錯誤の末、

cat list | parallel -j4 'md5=$(wget -O - {} | tee tmpfile_{#} | md5sum); mv tmpfile_{#} ${md5%% *}'

単に置き換える"だけでは、'bash が何かを先に置き換えることはできません。

関連情報