Bashスクリプトは複数のログファイルを生成します。ログファイルだけを生成したいです。

Bashスクリプトは複数のログファイルを生成します。ログファイルだけを生成したいです。

1回繰り返した後にスクリプトを終了したいです。何度も繰り返されるように見え、CTR Cで終了しなければなりませんでした。問題を解決する方法がわかりません。

[root@vPAS-Calipers lattice_private]# cat stat.sh
#!/bin/bash

DATE=`/bin/date +"%Y%m%d%H%M"`
#140 Caliper VM- Volte
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p  4001 " "show  call-mode statistics"
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p  4002 " "show  call-mode statistics"
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p  4003 " "show  call-mode statistics"
sleep 2

./stat.sh > stat-tps_${DATE}.txt

結果

stat-tps_202101271452.txt
stat-tps_202101271453.txt
stat-tps_202101271455.txt

答え1

これはスクリプトの最後の行によるものです。

./stat.sh > stat-tps_${DATE}.txt

これでスクリプトが実行されます。再び出力は新しいファイルにリダイレクトされます。 (スクリプトが再度実行されると、再実行して完了します。)

./linux_machine_cli_firing.expあなたの意図はコマンド出力をログファイルにリダイレクトすることを前提としていますか?その場合は、stderrにログインすることもできます。各コマンドに対して個別にリダイレクトできます。

#!/bin/bash

date=$(/bin/date +"%Y%m%d%H%M")
#140 Caliper VM- Volte
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p  4001 " "show  call-mode statistics" >"stat-tps_${date}.txt" 2>&1
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p  4002 " "show  call-mode statistics" >>"stat-tps_${date}.txt" 2>&1
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p  4003 " "show  call-mode statistics" >>"stat-tps_${date}.txt" 2>&1
sleep 2

最初のファイルは新しいファイルを作成するために使用され、残りはファイルを上書き>する>>のではなく、ファイルに追加するために使用されます。 stderr を stdout と同じ場所に送信する2>&1ため、エラーをキャッチしない場合は無視してください。

また、代わりに小文字の変数を使用しましたdate。特別な意味を持つすべての大文字の変数名がたくさんあるため、競合を避けるために小文字または大文字と小文字の混合名を使用するのが最も安全です。変数参照が含まれているので、ファイル名を二重引用符で囲みました(ここでは実際には必要ありませんが、スクリプトの衛生は良いです)。最後に、$()日付コマンドの出力をキャプチャするために、バックティック使用からクリーナー使用に変更しました。

別のオプションは、スクリプトの実行中にすべてのスクリプト出力をログファイルにリダイレクトすることです。これを行うには、このコマンドを使用してスクリプトを再実行する必要はありませんexec。必ずしてください。今後リダイレクトする出力のコマンドを実行します。

#!/bin/bash

date=$(/bin/date +"%Y%m%d%H%M")
exec >"stat-tps_${date}.txt" 2>&1    # Redirect output from this point on

#140 Caliper VM- Volte
sleep 2
./linux_machine_cli_firing.exp 172.9.9.14 "cd /root/cal/Product/run" "./cli -p  4001 " "show  call-mode statistics"
sleep 2
...

2>&1通常の出力でエラーがキャッチされたくない場合は、もう一度無視してください。

関連情報