#!/usr/bin/env bash help () { echo 'dchr-run [command]' echo 'https://dchr.dc09.ru' } clean () { echo '-- Cleaning up' umount "$1/proc" umount "$1/sys" umount "$1/dev" umount "$1/run" } error () { echo -e '-- \e[1;31mError\e[0m -- see output above' exit 1 # `trap` in main() calls cleanup function } setup () { echo '-- Mounting' mount -t proc /proc "$1/proc" || error mount -t sysfs /sys "$1/sys" || error mount -o bind /dev "$1/dev" || error mount -o bind /run "$1/run" } runcmd () { echo -e '-- \e[1;32mOK\e[0m -- running chroot' chrdir="$1" shift chrcmd=("$@") chroot "$chrdir" "${chrcmd[@]}" } main () { [[ "$1" == "--help" || "$1" == "" ]] && help && exit 0 chrdir=$(readlink -f "$1") shift trap "clean \"$chrdir\"" EXIT setup "$chrdir" runcmd "$chrdir" "$@" exit $? } sourced () { [ -n "$ZSH_VERSION" ] && [[ "$ZSH_EVAL_CONTEXT" =~ :file ]] && return 0 [ -n "$BASH_VERSION" ] && [[ "$0" != "$BASH_SOURCE" ]] && return 0 return 1 } sourced || main "$@"