Files
2020-05-17 20:00:08 +02:00

47 lines
2.0 KiB
Fish

set -g bax_version 1.0.0
complete -xc bax -n __fish_use_subcommand -a --help -d "Show usage help"
complete -xc bax -n __fish_use_subcommand -a --version -d "$bax_version"
function bax
switch "$argv"
case {,-}-h{elp,} ""
echo "usage: bax <bash commands> Run a bash command"
echo " bax --help Show this help"
echo " bax --version Show the current version"
case {,-}-v{ersion,}
echo "bax version $bax_version"
case \*
set -l delim "@@@@bax@@@@"
command bash -c "
$argv
status=\$?
[ \$status -eq 0 ] && echo $delim && alias && echo $delim && command awk '
BEGIN {
for (k in ENVIRON)
if (gsub(/\n/, \"\\\n\", ENVIRON[k]) >= 0)
print k, ENVIRON[k]
}
' || echo $delim \$status
" | command awk -v delim="$delim" '
$0 != delim || !++i {
if ($1 == delim) exit $2
else if (i < 2) print (i ? $0 : gsub(/\$/, "\\\$") >= 0 ? "echo \"" $0 "\"" : "")
else env[$1] = (gsub(/\\\n/, "\n") >= 0 ? substr($0, length($1) + 2) : "")
}
END {
for (k in env)
if (len++ && k !~ /^(_|SHLVL|PS1|XPC_SERVICE_NAME|AWK(LIB)?PATH)$|^BASH_FUNC/\
&& !(k in ENVIRON && ENVIRON[k] == env[k]))
print (\
k == "PATH" && gsub(/:/, "\" \"", env[k]) >= 0\
? "set PATH \"" env[k] "\"" : k == "PWD"\
? "cd \"" env[k] "\"" : "set -gx " k " \"" env[k] "\""\
)
if (!len) print "exit " $2
else for (k in ENVIRON) if (!(k in env)) print "set -e " k
}
' | source
end
end