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