2023-09-22 00:10:50 +02:00

90 lines
2.7 KiB
Bash

#!/bin/bash
# Usage
if [[ -z "${1}" || "${1}" =~ ^(--help|-h)$ ]]; then tee <<done
The MSYS2 Shell Manager 2016.6.22
Copyright (C) 2016 Renato Silva
Licensed under public domain
Usage: source $(basename "${0}") mingw32|mingw64|msys
Switch between shells without restarting MSYS2. This is done by setting the
MSYSTEM variable and sourcing /etc/profile. For interactive shells,
~/.bashrc is also sourced.
Usage: $(basename "${0}") COMMAND [ARGUMENTS]...
Execute native Windows programs with better MSYS2 integration. This is done
by using winpty to execute the Windows command prompt and commands from
/mingw32, /mingw64 and the Windows system32 directory, enabling them to work
better under MinTTY and similar terminals.
Usage: $(basename "${0}") DIRECTORY_OR_FILE...
Open each specified directory or file using Windows Explorer. This is done
by running one separate instance per argument, with paths converted to the
expected backslash format.
done
if [[ "${BASH_SOURCE}" = "${0}" ]]
then exit 1
else return 1
fi
fi
# Argument validation
if [[ "${BASH_SOURCE}" != "${0}" && ! "${1}" =~ ^(mingw32|mingw64|ucrt64|clang64|clang32|clangarm64|msys)$ ]]; then
echo "Unrecognized shell type ${1}"
return 1
fi
if [[ "${BASH_SOURCE}" = "${0}" && "${1}" =~ ^(mingw32|mingw64|ucrt64|clang64|clang32|clangarm64|msys)$ ]]; then
echo "Cannot switch to ${1} shell without sourcing"
exit 1
fi
if [[ "${BASH_SOURCE}" = "${0}" && -z "$(type -t "${1}")" && ! -e "${1}" ]]; then
echo "Could not find command ${1}"
exit 1
fi
# Main section
if [[ "${BASH_SOURCE}" != "${0}" ]]; then
_current_directory="$(pwd)"
export MSYSTEM="${1^^}"
source /etc/profile
[[ "${-}" = *i* && -f ~/.bashrc ]] && source ~/.bashrc
cd "${_current_directory}"
unset _current_directory
return 0
elif [[ (-f "${1}" && ! -x "${1}") || -d "${1}" ]]; then
explorer="$(cygpath --windir)/explorer.exe"
for path in "${@}"; do
path="$(cygpath --windows "${path}")"
test -e "${path}" && "${explorer}" "${path}"
done
exit 0
else
command="$(type -P "${1}")"
command="${command,,}"
command="${command%.exe}"
system32="$(cygpath --windir)/system32"
system32="${system32,,}"
case "${command}" in
"${system32}"/*) winpty "${@}" || exit ;;
/usr/bin/cmd) winpty "${@}" || exit ;;
/mingw32/*) winpty "${@}" || exit ;;
/mingw64/*) winpty "${@}" || exit ;;
/ucrt64/*) winpty "${@}" || exit ;;
/clang64/*) winpty "${@}" || exit ;;
/clang32/*) winpty "${@}" || exit ;;
/clangarm64/*) winpty "${@}" || exit ;;
*) "${@}" || exit ;;
esac
exit 0
fi