#!/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.1 # Input: arg1: 'date'-compatible timezone string (ex: "America/New_York") # TZDIR env var (optional; default: "/usr/share/zoneinfo") # Output: exports TZ # exit code 0 on success # exit code 1 on incorrect number of arguments # exit code 2 if unable to validate arg1 # Depends: yell, printenv, bash 5 # Tested on: Debian 10 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+