This question is pure curiosity. It is easy to get a date by running the date
command from bash, but it is an external executable and requires spawning a subprocess. I wondered whether it is possible to get the current time/date formatted without a subprocess. I could only find references to date/time formats in the context of PS1
and HISTTIMEFORMAT
. The latter allows this:
HISTTIMEFORMAT="%Y-%m-%d_%H:%M:%S "
history -s echo
x=$(history)
set -- $x
date="$2"
This comes close, but the $(history)
spawns a subprocess, as far as I can tell.
Can we do better?
To get current date and time in Bash script, use date command. date command returns current date and time with the current timezone set in the system.
bash [filename] runs the commands saved in a file. $@ refers to all of a shell script's command-line arguments. $1 , $2 , etc., refer to the first command-line argument, the second command-line argument, etc. Place variables in quotes if the values might have spaces in them.
bash
4.2 introduced a new specifier for printf
; this was extended in bash
4.3 to use the current time if no argument is given. %()T
expands to the current time, using the format appearing inside the parentheses.
$ printf '%(%Y-%m-%d_%H:%M:%S)T\n'
2016-03-25_12:38:10
With Linux and GNU bash 4:
#!/bin/bash
while IFS=: read -r a b; do
[[ $a =~ rtc_time ]] && t="${b// /}"
[[ $a =~ rtc_date ]] && d="${b// /}"
done < /proc/driver/rtc
echo "$d $t"
Output:
2016-03-26 08:03:09
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With