Browse Source

miaou-exec can call miaou-bash

main
pvincent 5 days ago
parent
commit
fd03743340
  1. 59
      tools/miaou-exec

59
tools/miaou-exec

@ -2,52 +2,65 @@
# CONSTANTS
BASEDIR=$(dirname "$0")
CONTAINER=
COMMAND_LINE=()
# FUNCTIONS
function usage {
local basename
basename=$(basename "$0")
echo Usage:
echo -e "\t$(basename "$0") <CONTAINER_NAME> [--] <COMMAND>"
echo -e "\t$basename <CONTAINER_NAME> [--] <COMMAND>"
echo -e "\t(PIPE or HEREDOC are allowed too)"
echo
echo "Examples:"
echo -e "\t$(basename "$0") container1 uptime"
echo -e "\t$(basename "$0") container1 -- ls -la"
echo -e "\t$(basename "$0") container1 -- bash <<EOF\n\t\tls -l\n\t\tuptime\n\tEOF"
echo -e "\t$basename container1 uptime"
echo -e "\t$basename container1 -- ls -la"
echo -e "\techo 'uptime' | $basename container1 # (PIPE usage)"
# echo -e "\t$basename container1 <<EOF\n\tls -l\n\tuptime\n\tEOF"
}
function parse_options {
COMMAND_LINE=()
while [[ $# -gt 0 ]]; do
case "$1" in
--help | -h)
usage && exit 0
;;
--help | -h) usage && exit 0 ;;
--)
shift 1
shift
COMMAND_LINE+=("$@")
break
;;
-*)
# options if any
echo >&2 "Unknown option: $1" && usage && exit 2
;;
-*) echo >&2 "Unknown option: $1" && usage && exit 2 ;;
*)
[[ -z $CONTAINER ]] && CONTAINER=$1 || COMMAND_LINE+=("$1")
if [[ ! -v CONTAINER ]]; then
CONTAINER=$1
else
COMMAND_LINE+=("$1")
fi
;;
esac
shift 1
shift
done
[[ ! -v CONTAINER ]] && usage && exit 1
if [[ -t 0 ]]; then
((${#COMMAND_LINE[@]} == 0)) && usage && exit 2
else
HEREDOC=true
fi
# echo "CONTAINER=$CONTAINER"
# echo "COMMAND_LINE=(${COMMAND_LINE[@]})"
([[ -z $CONTAINER ]] || [[ ${#COMMAND_LINE[@]} == 0 ]]) && usage && exit 1 || true
}
function exec {
incus exec "$CONTAINER" -- "${COMMAND_LINE[@]}"
if [[ -v HEREDOC ]]; then
# TODO: test whether miaou-bash mounted within container
script="miaou-bash <<EOF
$(cat)
EOF"
if ! incus exec -t "$CONTAINER" -- bash -lc "$script"; then
# TO BYPASS the miaou-exec error itself!
builtin exit $?
fi
else
incus exec "$CONTAINER" -- "${COMMAND_LINE[@]}"
fi
}
# MAIN

Loading…
Cancel
Save