#!/bin/bash # Desc: Set time zone environment variable TZ yell() { echo "$0: $*" >&2; } # Yell, Die, Try Three-Fingered Claw technique; # Ref/Attrib: https://stackoverflow.com/a/25515370 die() { yell "$*"; exit 111; } try() { "$@" || die "cannot $*"; } setTimeZoneEV(){ # Desc: Set time zone environment variable TZ # Usage: setTimeZoneEV arg1 # Version 0.1.3 # In : arg1: 'date'-compatible timezone string (ex: "America/New_York") # TZDIR env var (optional; default: "/usr/share/zoneinfo") # Out: exports TZ (env var) # exit code 0 on success # exit code 1 on incorrect number of arguments # exit code 2 if unable to validate arg1 # Depends: bash 5.0.3, printenv 8.30, yell() local tzDir returnState argTimeZone argTimeZone="$1"; if ! [[ $# -eq 1 ]]; then yell "ERROR:Invalid argument count."; return 1; fi; # Read TZDIR env var if available if printenv TZDIR 1>/dev/null 2>&1; then tzDir="$(printenv TZDIR)"; else tzDir="/usr/share/zoneinfo"; fi; # Validate TZ string if ! [[ -f "$tzDir"/"$argTimeZone" ]]; then yell "ERROR:Invalid time zone argument."; return 2; else # Export ARG1 as TZ environment variable TZ="$argTimeZone" && export TZ && returnState="true"; fi; # Determine function return code if [ "$returnState" = "true" ]; then return 0; fi; } # Exports TZ environment variable #==BEGIN sample code== date --iso-8601=seconds; echo "==============="; sleep 2 date --iso-8601=seconds cmd1="setTimeZoneEV America/New_York" echo "Running:$cmd1"; $cmd1; echo "Exit code:$?" date --iso-8601=seconds; echo "==============="; sleep 2 date --iso-8601=seconds cmd2="setTimeZoneEV Asia/Tokyo" echo "Running:$cmd2"; $cmd2; echo "Exit code:$?" date --iso-8601=seconds; echo "==============="; sleep 2 date --iso-8601=seconds cmd3="setTimeZoneEV"; echo "Running:$cmd3"; $cmd3; echo "Exit code:$?" date --iso-8601=seconds; echo "==============="; sleep 2 date --iso-8601=seconds cmd4="setTimeZoneEV Pacific/Lemuria" echo "Running:$cmd4"; $cmd4; echo "Exit code:$?" date --iso-8601=seconds; echo "==============="; sleep 2 try setTimeZoneEV Atlantic/Atlantis #==END sample code== # Author: Steven Baltakatei Sandoval # License: GPLv3+