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
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
|