GNUパラレル出力をラインごとのモードで実行するときに実行されるコマンドラインにすることはできますか?

GNUパラレル出力をラインごとのモードで実行するときに実行されるコマンドラインにすることはできますか?

fileにコマンドリストがあるとしましょうcmd_file

次のコマンドでこれらのコマンドを実行します。

cat cmd_file | parallel -k -I {} "{}"

コマンドの1つが失敗しました。すべてのコマンドはまったく同じCLIツールとは異なる入力を使用します。

コマンドリストをコマンドジェネレータループ(より複雑にする)に置き換えて誤ったコマンドを見つけるには、一度に1つのコマンドを実行する必要があります。

for ...; do
  # assemble the vars for the command
  echo "<command>"
  <command>
done

たとえば、失敗したコマンドを並列に表示したり、stderrで実行順序を表示したりするメカニズムはありますか?

答え1

あなたは導くことができますparallel実行された各コマンドを標準出力または標準エラーとして印刷します。manページから:

-v  Print the job to be run on stdout (standard output).
    Can be reversed with --silent. See also -t.


-t  Print the job to be run on stderr (standard error).

たぶん:

for ...; do
  # assemble the vars for the command
  echo "<command>"
done |
parallel -v -k

または準備ができたらcmd_file

parallel -v -k < cmd_file

または同様のものがあなたのニーズに適しているでしょう。

答え2

コマンドが終了値を設定すると、--joblogそれはあなたの友人です。

答え3

たとえば、失敗したコマンドを並列に表示したり、stderrで実行順序を表示したりするメカニズムはありますか?

GNU Parallel 20220722には以下が含まれています--colour-failed

parallel --tag --colour-failed "echo foo {}; {}" ::: true true false false true

関連情報