ストップウォッチとして機能するwhileループがあります。コマンドの実行にかかる時間を計算するために、これをスクリプトに実装したいと思います。コマンド完了後に終了したい。
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done &
スクリプト内でこのループを終了する必要があります。
頑張った
1-jobs but it gives me no output
2-kill $! but give me erro
しかし、ループは引き続き実行されます
答え1
timeout
パッケージに提供されているコマンドを使用してくださいcoreutils
。
NAME
timeout - run a command with a time limit
SYNOPSIS
timeout [OPTION] DURATION COMMAND [ARG]...
timeout [OPTION]
DESCRIPTION
Start COMMAND, and kill it if still running after DURATION.
答え2
同じ問題が発生しましたが、背景が異なります!
whileループを関数にして呼び出した直後にPIDを取得し、その変数で終了します。
function loopToKill() { # while loop inside a function
while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
sleep 1 # gotta have a sleep unless you want it to go crazy in the terminal
done
}
date1=`date +%s`
loopToKill & # run in background
loopPID=$! # get pid
# wait for whatever you needed
kill loopPID # here's where it get's cool
上記で必要に応じて削除できますが、必要なものを待つのはすべてです。これは私の状況に最適なソリューションであり、プロセスにどれくらい時間がかかっても常にスピナーを使用します。これは私の場合ですが、プロセス全体でタイマーを実行し続ける必要がある場合はこれが必要です。
もう一つの素晴らしい点は、入力を使用してそれを終了することです。これにはもう少し掘り下げる作業が必要です。現在、楽しく作業しているが危険だという内容を読む以外に、bashのユーザー入力についてあまり知りません。頑張ってください。役に立ったら、いいねを押してください!