コマンドの出力を使用して、出力をリダイレクトするファイルの名前を決定します。

コマンドの出力を使用して、出力をリダイレクトするファイルの名前を決定します。

smartctl -aその出力のデバイスシリアル番号を、出力が保存されるファイル名で実行して使用したいと思います。私はsmartctlこれを2回呼び出し、適切なテキスト操作を使用して出力を分割することでこれを行うことができることを知っています。 1回の呼び出しでこれを行う方法はありますかsmartctl

答え1

出力をsmartctl変数に保存し、必要に応じて複数回使用してください。

smartctl_output=$(smartctl -a /dev/sda)
serial_number=$(printf %s "$smartctl_output" | awk 'sub(/^Serial Number: */,"")')
printf %s "$smartctl_output" >"$serial_number.txt"

答え2

出力をsmartctl -a一時ファイルに保存してから二重解析できます。これにより、スクリプトをすばやくテストできます(一時ファイルを一度作成し、呼び出しをコメントアウトし、満足するまでパーサーを調整し、行のコメントsmartctlを削除しますsmartctl)。

あるいは、peeパイプを使用してsmartctl -a両方のプログラムに出力をパイプすることもできますが、あるプロセスには別のプロセスで見つかったシーケンス番号に名前を変更できる一時ファイルがまだ必要です。

関連情報