+#!/bin/bash
+
+# Date: 2020-03-30T02:13Z
+# Author: Steven Baltakatei Sandoval
+
+#== Variable Initialization ==
+
+#== Global constants ==
+PATH="/usr/local/bin/:$PATH" # Add default OpenTimestamps path to PATH (necessary if cron used to call this script)
+PATH="/opt/bktei:$PATH" # Add default baltakatei script install directory to PATH (necessary for other bk scripts)
+SCRIPT_HOSTNAME=$(hostname) # Save hostname of system running this script.
+SCRIPT_VERSION="bkgpslog 0.0.1" # Define version of script.
+SCRIPT_TIME_SHORT="$(date +%Y%m%dT%H%M%S%z)" # Save current date & time in ISO-8601 format.
+SCRIPT_DATE_SHORT="$(date +%Y%m%d)" # Save current date in ISO-8601 format.
+#DIROUT1="/home/pi/Sync/Evanescent_Location" # Define output directory.
+
+#== Function Definitions ==
+echoerr() {
+ echo "$@" 1>&2; # Define stderr echo function.
+} # Define stderr message function.
+showUsage() {
+ echoerr "USAGE:"
+ echoerr " bkgpslog.sh [ options ]"
+ echoerr
+ echoerr "OPTIONS:"
+ echoerr " -h, --help"
+ echoerr " Display help information."
+ echoerr
+ echoerr " --version"
+ echoerr " Display script version."
+ echoerr
+ echoerr " -v, --verbose"
+ echoerr " Display debugging info."
+ echoerr
+ echoerr " -o, --output [ directory ]"
+ echoerr " Specify output directory to save logs."
+} # Display information on how to use this script.
+showVersion() {
+ echoerr "$SCRIPT_VERSION"
+} # Display script version.
+vbm() {
+ if [ $OPTION_VERBOSE -eq "true" ]; then
+ echoerr "$@"
+ fi
+} # Verbose message display function.
+processArguments() {
+ while [ ! $# -eq 0 ]; do # While number of arguments ($#) is not (!) equal to (-eq) zero (0).
+ echoerr "DEBUG:Starting processArguments while loop."
+ echoerr "DEBUG:Provided arguments are:""$@"
+ case "$1" in
+ --h | --help) showUsage; exit 1;; # Display usage.
+ --version) showVersion; exit 1;; # Show version
+ --v | --verbose) OPTION_VERBOSE="true"; vbm "DEBUG:Verbose mode enabled.";; # Enable verbose mode.
+ --o | --output) if [ -d "$2" ]; then DIROUT1="$2"; fi ;; # Define output directory.
+ *) echoerr "ERROR: Unrecognized argument."; exit 1;; # Handle unrecognized options.
+ esac
+ shift
+ done
+} # Argument Processing
+checkExecutables() {
+
+} # Check that certain executables exist.
+
+main() {
+ processArguments # Process arguments.
+ checkExecutables "gpspipe" # Confirm that executables necessary to run are available.
+} # Main function.
+
+
+
+
+
+
+if [[ -d "$DIROUT1" ]] && command -v "gpspipe" 1>/dev/null 2>/dev/null ; then
+ while true; do
+ #echoerr "DEBUG:Starting while loop."
+ # Update time constants
+ TIME_CURRENT="$(date --iso-8601=seconds)" ;
+ #echoerr "DEBUG:TIME_CURRENT is:""$TIME_CURRENT" ;
+ TIME_CURRENT_SHORT="$(date -d "$TIME_CURRENT" +%Y%m%dT%H%M%S%z)"
+ #echoerr "DEBUG:TIME_CURRENT_SHORT is""$TIME_CURRENT_SHORT"
+ DATE_CURRENT="$(date -d "$TIME_CURRENT" --iso-8601=date)" ;
+ #echoerr "DEBUG:DATE_CURRENT is:""$DATE_CURRENT" ;
+ DATE_CURRENT_SHORT="$(date -d "$TIME_CURRENT" +%Y%m%d)" ;
+ #echoerr "DEBUG:DATE_CURRENT is:""$DATE_CURRENT_SHORT" ;
+ DATE_TOMORROW="$(date -d "$TIME_CURRENT next day" --iso-8601=date)" ;
+ #echoerr "DEBUG:DATE_TOMORROW is:""$DATE_TOMORROW" ;
+ TIME_NEXT_MIDNIGHT="$(date -d "$DATE_TOMORROW" --iso-8601=seconds)" ;
+ #echoerr "DEBUG:TIME_NEXT_MIDNIGHT is:""$TIME_NEXT_MIDNIGHT" ;
+ SECONDS_UNTIL_NEXT_MIDNIGHT="$(( $(date +%s -d "$TIME_NEXT_MIDNIGHT") - $(date +%s -d "$TIME_CURRENT") ))" ;
+ #echoerr "DEBUG:SECONDS_UNTIL_NEXT_MIDNIGHT is:""$SECONDS_UNTIL_NEXT_MIDNIGHT" ;
+ if [ "$SECONDS_UNTIL_NEXT_MIDNIGHT" -eq 0 ]; then echoerr "WARNING:Is it exactly midnight?" ; continue; fi ; # Exit loop early if equal to 0 because "timeout 0s" never ends.
+ if [ "$SECONDS_UNTIL_NEXT_MIDNIGHT" -lt 0 ]; then echoerr "ERROR:Time until midnight error." ; exit 1; fi ; # Exit script if equal to 0 because "timeout 0s" never ends.
+
+ # Update output file names.
+ DIROUTN="$DIROUT1" ;
+ FILEOUTN="$DATE_CURRENT_SHORT""..""$(hostname)""_location.nmea" ;
+
+ # Append location log until midnight.
+ timeout "$SECONDS_UNTIL_NEXT_MIDNIGHT""s" gpspipe -r 1>> "$DIROUTN"/"$FILEOUTN" 2>>/dev/null ; # log raw nmea data
+ done
+
+ #gpspipe -r -d -l -o "$DIROUT1"/"$FILEOUT1" ;
+
+else
+ echo "$SCRIPT_TIME_SHORT"">gpspipe or $DIROUT1 not found." >> ~/"$SCRIPT_DATE_SHORT"..error.log ;
+fi