I want to have a report like the following after a command finishes:
Start Time: 02/01/21 01:27pm
End Time: 02/01/21 02:29pm
Total Duration: 01 Hour 02 Minutes
I figured out I can get the Start Time and End Time using date +"%d/%m/%y %I:%M%P"
.
For example,
start=$(date +"%d/%m/%y %I:%M%P")
start_duration=$(date +%s)
youtube-dl
end=$(date +"%d/%m/%y %I:%M%P")
end_duration=$(date +%s)
runtime=$((end_duration-start_duration))
echo "Start Time: ${start}"
echo "End Time: ${end}"
Few Issues.
- I am not understanding how to print
Total Duration: 01 Hour 02 Minutes
- How can I make this script universal so that I can use any command, not just
youtube-dl
in this script.
I tried:
#! /bin/bash
Before=$(date +%s)
echo "$Before"
exec "$@"
ret=$?
After=$(date +%s)
echo "$After"
let Duration=After-Before
echo "$Duration"
if [[ $ret -eq 0 ]]
then
echo "Start Time: ${Before}"
echo "End Time: ${After}"
echo "Total Duration: ${Duration}"
return $ret
else
echo "Error: Command [ $@ ] returned $ret"
echo "Start Time: ${Before}"
echo "End Time: ${After}"
echo "Total Duration: ${Duration}"
return $ret
fi
But it does not work if I use ctrl+c
$ ./reporttime tail -f ~/.xsession-errors
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
Cinnamon warning: Log level 128: posix_spawn avoided (fd close requested)
^C
In fact, probably nothing is executed after exec "$@"
% ./reporttime cat reporttime
1609655953
#! /bin/bash
Before=$(date +%s)
echo "$Before"
exec "$@"
ret=$?
After=$(date +%s)
echo "$After"
let Duration=After-Before
echo "$Duration"
if [[ $ret -eq 0 ]]
then
echo "Start Time: ${Before}"
echo "End Time: ${After}"
echo "Total Duration: ${Duration}"
return $ret
else
echo "Error: Command [ $@ ] returned $ret"
echo "Start Time: ${Before}"
echo "End Time: ${After}"
echo "Total Duration: ${Duration}"
return $ret
fi%