コマンドをファイルに出力する以外に、コマンド自体をどのように出力できますか?
私もできることを知っていますシェルスクリプトで画面とファイルにテキストを出力する方法は?出力をキャプチャします。私のユースケースは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つのコマンドを実行します{}
。
pytest
文字列とスペースで連結された引数(のデフォルトの最初の文字$IFS
)を印刷します。pytest
指定されたパラメータを使用して実際のコマンドを実行します。
これにより、中かっこグループが以前のようにリダイレクトされます。
答え2
sh -v <<< 'pytest /awesome_tests -k test_quick_tests -n auto' \
&> test_output_$(date -u +"%FT%H%MZ").txt
sh -v
sh
各コマンドラインはエコーされているので、すでにstderr
出力ファイルをキャプチャしているので、そのオプションを使用して実行したいコマンドを提供するstderr
だけです。-v
sh
私のテストでは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
その<<<
目的です。