#!/bin/sh # The MIT License (MIT) # # Copyright (c) 2026 pacman64 # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to deal # in the Software without restriction, including without limitation the rights # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell # copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. # prit [options...] [command...] [args...] # # Podman Run Interactive Teletype starts the podman container given and puts # you into its running teletype shell, using the command `podman run -it`. # # When no command is given, the default is to run a container's live shell. # # The extra options are, available both in single and double-dash versions # # -h, -help show this help message # -n, -name run using the container name given, instead of picking one name='' container='' case "$1" in -h|--h|-help|--help) awk '/^# +prit /, /^$/ { gsub(/^# ?/, ""); print }' "$0" exit 0 ;; -n|--name) if [ $# -lt 2 ]; then printf "forgot the container name\n" >&2 exit 1 fi name="$1" container="$1" shift ;; esac if [ -z "${container}" ] && command -v fzf > /dev/null; then data="$(podman images)" picker='fzf --reverse --header-first --header-lines=1' if [ $# -eq 0 ]; then msg='podman run -it [container]: enter picks container, escape quits' else msg="podman run -it [container] $*: enter picks container, escape quits" fi pick="$(echo "${data}" | ${picker} --header="${msg}")" container="$(echo "${pick}" | awk '{ print $3 }')" name="$(echo "${pick}" | awk '{ print $1 }')" if [ -z "${container}" ]; then exit 1 fi fi if [ -z "${container}" ]; then awk '/^# +prit /, /^$/ { gsub(/^# ?/, ""); print }' "$0" exit 1 fi if [ $# -eq 0 ]; then printf "\n\e[7mentered\e[0m shell from podman container \e[7m%s\e[0m\n\n" \ "${name}" >&2 fi podman run -it "${container}" "$@" res=$? if [ $# -eq 0 ]; then printf "\n\e[7mexited\e[0m shell from podman container \e[7m%s\e[0m\n\n" \ "${name}" >&2 fi exit "${res}"