シェルコマンドをファイルに出力し、コマンドを実行します。

シェルコマンドをファイルに出力し、コマンドを実行します。

コマンドをファイルに出力する以外に、コマンド自体をどのように出力できますか?

私もできることを知っていますシェルスクリプトで画面とファイルにテキストを出力する方法は?出力をキャプチャします。私のユースケースはpytestに固有です。

pytest /awesome_tests -k test_quick_tests -n auto &> test_output_$(date -u +"%FT%H%MZ").txt

結果がどの用途に使用されているかを正確に知ることができるように、出力でコマンドを実行することは本当に役立ちます。

答え1

&>別のオプションは、起動したリダイレクトにbashを使用することです。それ以外の場合はshと互換性があります。

set -- '/awesome_tests' '-k' 'test_quick_tests' '-n' 'auto'
{ printf '%s %s\n' 'pytest' "$*";
  pytest "$@";
} &> test_output_$(date -u +"%FT%H%MZ").txt

これは、コマンドの引数を含むように位置引数を設定しますpytest。次に、中かっこグループ内で2つのコマンドを実行します{}

  1. pytest文字列とスペースで連結された引数(のデフォルトの最初の文字$IFS)を印刷します。
  2. pytest指定されたパラメータを使用して実際のコマンドを実行します。

これにより、中かっこグループが以前のようにリダイレクトされます。

答え2

sh -v <<< 'pytest /awesome_tests -k test_quick_tests -n auto' \
    &> test_output_$(date -u +"%FT%H%MZ").txt

sh -vsh各コマンドラインはエコーされているので、すでにstderr出力ファイルをキャプチャしているので、そのオプションを使用して実行したいコマンドを提供するstderrだけです。-vsh

私のテストではsh -v -c 'your-command-here'これはうまくいきませんでした。

echo 'pytest /awesome_tests -k test_quick_tests -n auto' | \
    sh -v &> test_output_$(date -u +"%FT%H%MZ").txt

それはうまくいきますが、echo ... |それはまさにbashその<<<目的です。

関連情報