Remove process substitution from command-list-all.bash file

This commit is contained in:
Trevor Brown 2021-05-24 17:06:17 -04:00
parent e121a93716
commit 4dbe88a62a

View File

@ -4,48 +4,42 @@ list_all_command() {
local plugin_name=$1 local plugin_name=$1
local query=$2 local query=$2
local plugin_path local plugin_path
local std_out local std_out_file
local std_err local std_err_file
local output
plugin_path=$(get_plugin_path "$plugin_name") plugin_path=$(get_plugin_path "$plugin_name")
check_if_plugin_exists "$plugin_name" check_if_plugin_exists "$plugin_name"
# Capture return code to allow error handling # Capture return code to allow error handling
return_code=0 && split_outputs std_out std_err "bash ${plugin_path}/bin/list-all" || return_code=$? std_out_file="$(mktemp "/tmp/asdf-command-list-all-${plugin_name}.stdout.XXXXXX")"
std_err_file="$(mktemp "/tmp/asdf-command-list-all-${plugin_name}.stderr.XXXXXX")"
return_code=0 && $(bash ${plugin_path}/bin/list-all > "$std_out_file" 2> "$std_err_file") || return_code=$?
if [[ $return_code -ne 0 ]]; then if [[ $return_code -ne 0 ]]; then
# Printing all output to allow plugin to handle error formatting # Printing all output to allow plugin to handle error formatting
printf "Plugin %s's list-all callback script failed with output:\\n" "${plugin_name}" >&2 printf "Plugin %s's list-all callback script failed with output:\\n" "${plugin_name}" >&2
printf "%s\\n" "${std_err}" >&2 printf "%s\\n" "$(cat "$std_err_file")" >&2
printf "%s\\n" "${std_out}" >&2 printf "%s\\n" "$(cat "$std_out_file")" >&2
rm "$std_out_file" "$std_err_file"
exit 1 exit 1
fi fi
if [[ $query ]]; then if [[ $query ]]; then
std_out=$(tr ' ' '\n' <<<"$std_out" | output=$(cat "$std_out_file" | tr ' ' '\n' |
grep -E "^\\s*$query" | grep -E "^\\s*$query" |
tr '\n' ' ') tr '\n' ' ')
else
output=$(cat "$std_out_file")
fi fi
IFS=' ' read -r -a versions_list <<<"$std_out" IFS=' ' read -r -a versions_list <<<"$output"
for version in "${versions_list[@]}"; do for version in "${versions_list[@]}"; do
printf "%s\\n" "${version}" printf "%s\\n" "${version}"
done done
}
# This function splits stdout from std error, whilst preserving the return core # Remove temp files if they still exist
function split_outputs() { rm "$std_out_file" "$std_err_file" || true
{
IFS=$'\n' read -r -d '' "${1}"
IFS=$'\n' read -r -d '' "${2}"
(
IFS=$'\n' read -r -d '' _ERRNO_
return "${_ERRNO_}"
)
} < <((printf '\0%s\0%d\0' "$( ( ( ({
${3}
printf "%s\n" ${?} 1>&3-
} | tr -d '\0' 1>&4-) 4>&2- 2>&1- | tr -d '\0' 1>&4-) 3>&1- | exit "$(cat)") 4>&1-)" "${?}" 1>&2) 2>&1)
} }
list_all_command "$@" list_all_command "$@"