lib/sh/util.sh: import_vars: documented that it's idempotent
bugfix: lib/sh/util.sh: stderr_matches(): support $benign_error properly, by handling exit status logging in this func instead
bugfix: lib/sh/util.sh: stderr_matches(): need to separately display errors that were incorrectly suppressed due to $benign_error
bugfix: lib/sh/util.sh: is_err(): rethrow must be inverted (rethrow->false if error)
lib/sh/util.sh: added is_err()
fix: lib/sh/util.sh: stderr_matches(): usage: documented that this may require benign_error=1
bugfix: lib/sh/util.sh: highlight_log_msg(): when not can_highlight_log_msg, need to remove any surrounding formatting
fix: lib/sh/util.sh: die_error_hidden(): always log local vars at same log_level as echo_func
lib/sh/util.sh: split_lines(): usage: matched up and synced different syntaxes
bugfix: lib/sh/util.sh: log_msg!(): split_lines does not support being invoked by wrapper; need to use `declare lines; wrapper "split_lines" str` instead
fix: lib/sh/util.sh: split_lines(): usage: documented different syntax for when using wrapper
bugfix: lib/sh/util.sh: die_error_hidden(): echo_func to assist debugging
bugfix: lib/sh/util.sh: split(): need to limit the effects of IFS to just the splitting, so it doesn't cause strange errors in other functions
bugfix: stderr2stdout(): fd 2 must be redirected back to fd 2, not log-filtered, in case there are other errors in addition to the benign error. this fixes a bug in pg_schema_exists(), where errors about the DB being down were not displayed because they were log-filtered out.
bugfix: lib/sh/util.sh: `type` calls: need -- before cmd in case it starts with -
lib/sh/util.sh: cmd2rel_path: use is_extern()
lib/sh/util.sh: try: usage: added location of finally block
bugfix: lib/sh/util.sh: type(): need to handle options before command name
lib/sh/util.sh: added 1st_non_opt()
lib/sh/util.sh: unalias(): use self_builtin, which is now defined before it
bugfix: lib/sh/util.sh: commands: `type` calls: need to account for the fact that any alias is already expanded
lib/sh/util.sh: functions: moved before commands since commands are more complex
fix: lib/sh/util.sh: try usage: documented that the split syntax with prep_try is meant to be used with vars before the cmd
fix: lib/sh/util.sh: echo_vars(): also need to print unset vars (including unset kw_params)
lib/sh/util.sh: echo_vars(): put loop var on same line as `for`
bugfix: lib/sh/util.sh: sudo(): need to preserve PATH separately because -E does not preserve this
lib/sh/util.sh: echo_redirs_cmd(): inline the function alias since it's only used in one place
bugfix: lib/sh/util.sh: redir(): need to load new aliases before it
lib/sh/util.sh: echo_redirs_cmd(): log $PATH to facilitate troubleshooting
lib/sh/util.sh: echo_redirs_cmd(): documented what the $(...) section does
lib/sh/util.sh: echo_redirs_cmd(): moved comment about <>file redirs to line that it applies to
lib/sh/util.sh: moved echo_redirs_cmd() to right before redir() which uses it
lib/sh/util.sh: catch(): log at higher log_level, since this is internal code
fix: lib/sh/util.sh: die_e(): treat SIGPIPE as benign error
lib/sh/util.sh: removed no longer used ignore_sig(). use ignore() instead, which now supports SIG*.
lib/sh/util.sh: piped_cmd(): use ignore, which now supports SIG*
lib/sh/util.sh: signals: catch(): added echo_func
lib/sh/util.sh: set_global_fds(): debug to global stderr in case stderr filtered
lib/sh/util.sh: debugging: use configurable debug_fd (set to $err_fd)
lib/sh/util.sh: signals: override catch() to support SIG* as exception type
lib/sh/util.sh: moved primitives sections before more complex sections that depend on them
lib/sh/util.sh: 2nd functions section: moved to 1st functions section
bugfix: lib/sh/util.sh: added workaround for bash bug where exit sometimes inxeplicably ignores $?
fix: lib/sh/util.sh: self_builtin: avoid $() so that $? isn't modified
lib/sh/util.sh: use new self_builtin
lib/sh/util.sh: added self_builtin
lib/sh/util.sh: pv(), pf(): moved to debugging section
bugfix: lib/sh/util.sh: stderr_matches(): also need to handle any filter error, such as caused by Ctrl+C
lib/sh/util.sh: stderr_matches(): echo_vars @PIPESTATUS_ to assist debugging
bugfix: lib/sh/util.sh: stderr2stdout(): use piped_cmd to ignore SIGPIPE since the output of this will piped to another command
lib/sh/util.sh: setup_log_fd(): $log_fd: use 3 (stdlog) since other scripts are likely to use this for logging as well
fix: lib/sh/util.sh: setup_log_fd(): fd_set_default(): use $log_fd instead of repeating the value of it
lib/sh/util.sh: die(): log at higher log_level, since this is logging code
lib/sh/util.sh: highlight_log_msg(): log at higher log_level, since this is logging code
bugfix: lib/sh/util.sh: stderr_matches(): only set benign_error=1 if the matched error occurred
lib/sh/util.sh: ignore_e(): also set benign_error=1
fix: lib/sh/util.sh: prep_try alias: removed inaccurate comment
bugfix: lib/sh/util.sh: stdout2fd(): moved after redir() which it depends on
fix: lib/sh/util.sh: command(): moved `|| die_e` to command__exec so it would be properly indented under the echoed command
lib/sh/util.sh: verbosity_compat(): log at higher log_level because it's logging code
lib/sh/util.sh: $benign_error: log at higher log_level because it's logging code
lib/sh/util.sh: $top_* vars, $is_outermost: log at higher log_level because it's startup code
lib/sh/util.sh: $top_script: echo_vars this like the other $top_* vars
lib/sh/util.sh: .(): log at higher log_level because it's startup code
lib/sh/util.sh: is_dot_script(): run with higher log_level since this is run at the beginning of the script
lib/sh/util.sh, runscripts/util.run: set_paths(): run with higher log_level to hide all the paths that are set at the beginning of the script
lib/sh/util.sh: added log++ stub
lib/sh/util.sh: added log_local stub
lib/sh/util.sh: added log() stub so internal commands can use it
fix: lib/sh/util.sh: echo_vars(): log at same log_level as echo_func so kw_params are displayed along with positional params
fix: lib/sh/util.sh: rel_path(): log this internal command at a higher log_level so it's normally hidden
fix: lib/sh/util.sh: log_msg!(): log split_lines at a higher log_level so it's normally hidden
bugfix: lib/sh/util.sh: stderr_matches(): `log_local; log++` should apply to just stdout_contains() and part of stderr2stdout() rather than all of stderr_matches()
lib/sh/util.sh: stderr_matches(): run at higher log_level because error-handling internals should not be logged by default
bugfix: lib/sh/util.sh: stderr_matches(): handle any error: only ignore_e if the error exit status was associated with the matched error message
bugfix: lib/sh/util.sh: stderr_matches(): handle any error: need force-exit with rethrow_exit() because caller's test of return status disables errexit
lib/sh/util.sh: added rethrow_exit(), which exits even where errexit is disabled
lib/sh/util.sh: sudo alias: use function instead so this can be overridden
lib/sh/util.sh: added is_intern()
lib/sh/util.sh: is_callable(): use just $1 because multiple args are not applicable
lib/sh/util.sh: added is_world_executable()
lib/sh/util.sh: added has_perms()
lib/sh/util.sh: esc_args(): renamed to just esc() because this can also be used on a single value
lib/sh/util.sh: added is_extern()
lib/sh/util.sh: added sudo alias to alias-expand command
lib/sh/util.sh: added $sudo
lib/sh/util.sh: added cp alias
bugfix: lib/sh/util.sh: local_array/export_array: do need -a because that it's an array is apparently not autodetected by the () on Mac
lib/sh/util.sh: import_vars: documented that vars already set will not be overwritten
lib/sh/util.sh: removed end_try_subshell, which now does the same thing as end_try
bugfix: lib/sh/util.sh: die(): usage: documented that if msg uses $(...), save_e is needed
bugfix: lib/sh/util.sh: already_exists_msg(): need to save_e, because new $(mk_hint) call resets $?
lib/sh/util.sh: die(): always errexit even if $e = 0, because die always indicates an error
lib/sh/util.sh: added rethrow!(), which always errexits, even if $e = 0
lib/sh/util.sh: rethrow(): also work in situations where $e is not set
lib/sh/util.sh: rethrow: made it a function since there is now no need for it to be an alias
lib/sh/util.sh: rethrow: removed `test "$e" != 0` since errexit only does anything if $e != 0
lib/sh/util.sh: removed separate rethrow_exit*, rethrow_subshell*, since they now do the same thing as rethrow*
lib/sh/util.sh: rethrow*!: use new errexit, which works in functions and subshells