From ff0041f1416098cbd90d4374c72e8cb6ff9c22b3 Mon Sep 17 00:00:00 2001 From: Tom Ryder Date: Wed, 25 Jan 2017 14:51:53 +1300 Subject: Avoid a fork in options detection --- sh/profile.d/options.sh | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'sh') diff --git a/sh/profile.d/options.sh b/sh/profile.d/options.sh index 345888d0..a668a360 100644 --- a/sh/profile.d/options.sh +++ b/sh/profile.d/options.sh @@ -1,10 +1,13 @@ # Cache the options available to certain programs. Run all this in a subshell # (none of its state needs to endure in the session) ( -options() ( +options() { # Check or create the directory to cache the options + # Shift the program name off; remaining arguments are the options to check dir=$HOME/.cache/$1 + prog=$1 + shift # Directory already exists; bail out [ -d "$dir" ] && exit @@ -14,18 +17,16 @@ options() ( cd -- "$dir" || exit # Write the program's --help output to a file, even if it's empty - "$1" --help help 2>/dev/null || exit - - # Shift the program name off; remaining arguments are the options to check - shift + # This probably only works with GNU tools in general + "$prog" --help help 2>/dev/null || exit - # Iterate through some useful options and create files to show they're - # available if found in the help output + # Iterate through remaining arguments (desired options), creating files to + # show they're available if found in the help output for opt ; do command -p grep -q -- '[^[:alnum:]]--'"$opt"'[^[:alnum:]]' help && touch -- "$opt" done -) +} # Cache options for bc(1) options bc \ -- cgit v1.2.3