You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

74 lines
1.5 KiB

#!/usr/bin/env miaou-bash
# CONSTANTS
# FUNCTIONS
function usage {
local basename
basename=$(basename "$0")
echo Usage:
echo -e "\t$basename <CONTAINER_NAME> [--] <COMMAND>"
echo -e "\t(PIPE or HEREDOC are allowed too)"
echo
echo "Examples:"
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 ;;
--)
shift
COMMAND_LINE+=("$@")
break
;;
-*) echo >&2 "Unknown option: $1" && usage && exit 2 ;;
*)
if [[ ! -v CONTAINER ]]; then
CONTAINER=$1
else
COMMAND_LINE+=("$1")
fi
;;
esac
shift
done
[[ ! -v CONTAINER ]] && usage && exit 1
if [[ -t 0 ]]; then
echo "${COMMAND_LINE[@]}"
echo "${#COMMAND_LINE[@]}"
if [[ "${#COMMAND_LINE[@]}" == 0 ]]; then
usage
builtin exit 2
fi
else
HEREDOC_OR_PIPE=true
fi
}
function exec {
if [[ -v HEREDOC_OR_PIPE ]]; 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
parse_options "$@"
exec