mirror of
https://github.com/cmderdev/cmder.git
synced 2025-11-09 21:59:08 +08:00
Optimize and fix cmder.sh and cmder_exinit scripts
Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
This commit is contained in:
81
vendor/cmder.sh
vendored
81
vendor/cmder.sh
vendored
@@ -7,90 +7,115 @@
|
|||||||
# Add system specific users customizations to $HOME/.bashrc, these
|
# Add system specific users customizations to $HOME/.bashrc, these
|
||||||
# customizations will not follow Cmder to another machine.
|
# customizations will not follow Cmder to another machine.
|
||||||
|
|
||||||
function runProfiled {
|
# Source all .sh scripts in a given directory
|
||||||
unset profile_d_scripts
|
# Args: $1 - directory path containing .sh scripts to source
|
||||||
pushd "${1}" >/dev/null
|
run_profile_d() {
|
||||||
|
local profile_d_scripts
|
||||||
|
pushd "${1}" >/dev/null || return
|
||||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||||
|
|
||||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
if [ -n "${profile_d_scripts}" ]; then
|
||||||
for x in ${profile_d_scripts} ; do
|
for script in ${profile_d_scripts}; do
|
||||||
# echo Sourcing "${1}/${x}"...
|
# echo Sourcing "${1}/${script}"...
|
||||||
. "${1}/${x}"
|
. "${1}/${script}"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
popd >/dev/null
|
popd >/dev/null || return
|
||||||
}
|
}
|
||||||
|
|
||||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
# Detect and set CMDER_ROOT for bash admin sessions
|
||||||
if [ "$CMDER_ROOT" == "" ] ; then
|
# Converts Windows paths to Unix paths if needed
|
||||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
if [ -z "$CMDER_ROOT" ]; then
|
||||||
|
case "$ConEmuDir" in
|
||||||
|
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
|
||||||
|
esac
|
||||||
else
|
else
|
||||||
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
|
case "$CMDER_ROOT" in
|
||||||
|
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove any trailing '/'
|
# Remove any trailing '/' from CMDER_ROOT
|
||||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
CMDER_ROOT="${CMDER_ROOT%/}"
|
||||||
|
|
||||||
|
# Exit early if CMDER_ROOT is not set
|
||||||
|
if [ -z "$CMDER_ROOT" ]; then
|
||||||
|
echo "Warning: CMDER_ROOT is not set. Cmder integration skipped."
|
||||||
|
return 2>/dev/null || exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
export CMDER_ROOT
|
export CMDER_ROOT
|
||||||
|
|
||||||
|
# Detect Git installation location
|
||||||
if [ -f "/c/Program Files/Git/cmd/git.exe" ]; then
|
if [ -f "/c/Program Files/Git/cmd/git.exe" ]; then
|
||||||
GIT_INSTALL_ROOT="/c/Program Files/Git"
|
GIT_INSTALL_ROOT="/c/Program Files/Git"
|
||||||
elif [ -f "/c/Program Files(x86)/Git/cmd/git.exe" ]; then
|
elif [ -f "/c/Program Files(x86)/Git/cmd/git.exe" ]; then
|
||||||
GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
|
GIT_INSTALL_ROOT="/c/Program Files(x86)/Git"
|
||||||
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ]; then
|
elif [ -f "${CMDER_ROOT}/vendor/git-for-windows/cmd/git.exe" ]; then
|
||||||
GIT_INSTALL_ROOT=${CMDER_ROOT}/vendor/git-for-windows
|
GIT_INSTALL_ROOT="${CMDER_ROOT}/vendor/git-for-windows"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]] ; then
|
# Add Git to PATH if not already present
|
||||||
|
if [[ -n "${GIT_INSTALL_ROOT}" && ! "$PATH" =~ "${GIT_INSTALL_ROOT}/bin:" ]]; then
|
||||||
PATH="${GIT_INSTALL_ROOT}/bin:$PATH"
|
PATH="${GIT_INSTALL_ROOT}/bin:$PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Add Cmder directories to PATH
|
||||||
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
|
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
|
||||||
|
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
# Create profile.d directory if it doesn't exist
|
||||||
# to source them at startup.
|
|
||||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
|
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||||
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Source all .sh scripts in profile.d directories
|
||||||
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
run_profile_d "${CMDER_ROOT}/config/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
||||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
||||||
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
# Source user profile from CMDER_ROOT config
|
||||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
||||||
. "${CMDER_ROOT}/config/user_profile.sh"
|
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
# Handle CMDER_USER_CONFIG if set
|
||||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||||
|
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
|
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
|
||||||
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
||||||
|
|
||||||
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
# Source user profile from CMDER_USER_CONFIG
|
||||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
||||||
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
# Determine the user profile path for creation if needed
|
||||||
echo Creating user startup file: "${CmderUserProfilePath}"
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||||
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
|
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
|
else
|
||||||
|
cmder_user_profile_path="${CMDER_ROOT}/config/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create user profile from default template if it doesn't exist
|
||||||
|
if [ ! -f "${cmder_user_profile_path}" ] && [ -f "${CMDER_ROOT}/vendor/user_profile.sh.default" ]; then
|
||||||
|
echo "Creating user startup file: ${cmder_user_profile_path}"
|
||||||
|
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${cmder_user_profile_path}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Source the users .bashrc file if it exists
|
# Source the users .bashrc file if it exists
|
||||||
|
|||||||
85
vendor/cmder_exinit
vendored
85
vendor/cmder_exinit
vendored
@@ -22,92 +22,109 @@
|
|||||||
# # from outside Cmder.
|
# # from outside Cmder.
|
||||||
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
# CMDER_ROOT=${USERPROFILE}/cmder # This is not required if launched from Cmder.
|
||||||
|
|
||||||
function runProfiled {
|
# Source all .sh or .zsh scripts in a given directory based on shell type
|
||||||
unset profile_d_scripts
|
# Args: $1 - directory path containing shell scripts to source
|
||||||
pushd "${1}" >/dev/null
|
run_profile_d() {
|
||||||
|
local profile_d_scripts
|
||||||
|
pushd "${1}" >/dev/null || return
|
||||||
|
|
||||||
if [ ! "x${ZSH_VERSION}" = "x" ]; then
|
if [ -n "${ZSH_VERSION}" ]; then
|
||||||
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
profile_d_scripts=$(ls *.zsh 2>/dev/null)
|
||||||
elif [ ! "x${BASH_VERSION}" = "x" ]; then
|
elif [ -n "${BASH_VERSION}" ]; then
|
||||||
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
profile_d_scripts=$(ls *.sh 2>/dev/null)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! "x${profile_d_scripts}" = "x" ] ; then
|
if [ -n "${profile_d_scripts}" ]; then
|
||||||
for x in ${profile_d_scripts} ; do
|
for script in ${profile_d_scripts}; do
|
||||||
echo Sourcing "${1}/${x}"...
|
echo "Sourcing ${1}/${script}..."
|
||||||
. "${1}/${x}"
|
. "${1}/${script}"
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
popd >/dev/null
|
popd >/dev/null || return
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check that we haven't already been sourced.
|
# Check that we haven't already been sourced
|
||||||
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
[[ -z ${CMDER_EXINIT} ]] && CMDER_EXINIT="1" || return
|
||||||
|
|
||||||
# We do this for bash as admin sessions since $CMDER_ROOT is not being set
|
# Detect and set CMDER_ROOT for bash admin sessions
|
||||||
if [ "$CMDER_ROOT" = "" -a "$ConEmuDir" != "" ] ; then
|
# Converts Windows paths to Unix paths if needed
|
||||||
|
if [ -z "$CMDER_ROOT" ] && [ -n "$ConEmuDir" ]; then
|
||||||
if [ -d "${ConEmuDir}../../vendor" ]; then
|
if [ -d "${ConEmuDir}../../vendor" ]; then
|
||||||
case "$ConEmuDir" in *\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." ; pwd );; esac
|
case "$ConEmuDir" in
|
||||||
|
*\\*) CMDER_ROOT=$( cd "$(cygpath -u "$ConEmuDir")/../.." && pwd );;
|
||||||
|
esac
|
||||||
else
|
else
|
||||||
echo "Running in ConEmu without Cmder, skipping Cmder integration."
|
echo "Running in ConEmu without Cmder, skipping Cmder integration."
|
||||||
fi
|
fi
|
||||||
elif [ "$CMDER_ROOT" != "" ] ; then
|
elif [ -n "$CMDER_ROOT" ]; then
|
||||||
case "$CMDER_ROOT" in *\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";; esac
|
case "$CMDER_ROOT" in
|
||||||
|
*\\*) CMDER_ROOT="$(cygpath -u "$CMDER_ROOT")";;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! "$CMDER_ROOT" = "" ] ; then
|
if [ -n "$CMDER_ROOT" ]; then
|
||||||
# Remove any trailing '/'
|
# Remove any trailing '/' from CMDER_ROOT
|
||||||
CMDER_ROOT=$(echo $CMDER_ROOT | sed 's:/*$::')
|
CMDER_ROOT="${CMDER_ROOT%/}"
|
||||||
|
|
||||||
echo "Using \"CMDER_ROOT\" at \"${CMDER_ROOT}\"."
|
echo "Using CMDER_ROOT at \"${CMDER_ROOT}\"."
|
||||||
|
|
||||||
export CMDER_ROOT
|
export CMDER_ROOT
|
||||||
|
|
||||||
PATH=${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}
|
# Add Cmder directories to PATH
|
||||||
|
PATH="${CMDER_ROOT}/bin:${CMDER_ROOT}/vendor/bin:$PATH:${CMDER_ROOT}"
|
||||||
|
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
# Drop *.sh or *.zsh files into "${CMDER_ROOT}\config\profile.d"
|
# Create profile.d directory if it doesn't exist
|
||||||
# to source them at startup.
|
|
||||||
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
|
if [ ! -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||||
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
mkdir -p "${CMDER_ROOT}/config/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Source all shell scripts in profile.d directories
|
||||||
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
if [ -d "${CMDER_ROOT}/config/profile.d" ]; then
|
||||||
runProfiled "${CMDER_ROOT}/config/profile.d"
|
run_profile_d "${CMDER_ROOT}/config/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
if [ -d "${CMDER_USER_CONFIG}/profile.d" ]; then
|
||||||
runProfiled "${CMDER_USER_CONFIG}/profile.d"
|
run_profile_d "${CMDER_USER_CONFIG}/profile.d"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||||
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
if [ -f "$CMDER_ROOT/config/user-profile.sh" ]; then
|
||||||
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
mv "$CMDER_ROOT/config/user-profile.sh" "$CMDER_ROOT/config/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CmderUserProfilePath="${CMDER_ROOT}/config/user_profile.sh"
|
# Source user profile from CMDER_ROOT config
|
||||||
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
if [ -f "${CMDER_ROOT}/config/user_profile.sh" ]; then
|
||||||
. "${CMDER_ROOT}/config/user_profile.sh"
|
. "${CMDER_ROOT}/config/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${CMDER_USER_CONFIG}" != "" ] ; then
|
# Handle CMDER_USER_CONFIG if set
|
||||||
# Renaming to "config\user_profile.sh" to "user_profile.sh" for consistency.
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||||
|
# Rename legacy user-profile.sh to user_profile.sh for consistency
|
||||||
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
|
if [ -f "$CMDER_USER_CONFIG/user-profile.sh" ]; then
|
||||||
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
mv "$CMDER_USER_CONFIG/user-profile.sh" "$CMDER_USER_CONFIG/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
export PATH=${CMDER_USER_CONFIG}/bin:$PATH
|
export PATH="${CMDER_USER_CONFIG}/bin:$PATH"
|
||||||
|
|
||||||
CmderUserProfilePath="${CMDER_USER_CONFIG}/user_profile.sh"
|
# Source user profile from CMDER_USER_CONFIG
|
||||||
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
if [ -f "${CMDER_USER_CONFIG}/user_profile.sh" ]; then
|
||||||
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
. "${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "${CmderUserProfilePath}" ] ; then
|
# Determine the user profile path for creation if needed
|
||||||
echo Creating user startup file: "${CmderUserProfilePath}"
|
if [ -n "${CMDER_USER_CONFIG}" ]; then
|
||||||
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${CmderUserProfilePath}"
|
cmder_user_profile_path="${CMDER_USER_CONFIG}/user_profile.sh"
|
||||||
|
else
|
||||||
|
cmder_user_profile_path="${CMDER_ROOT}/config/user_profile.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create user profile from default template if it doesn't exist
|
||||||
|
if [ ! -f "${cmder_user_profile_path}" ] && [ -f "${CMDER_ROOT}/vendor/user_profile.sh.default" ]; then
|
||||||
|
echo "Creating user startup file: ${cmder_user_profile_path}"
|
||||||
|
cp "${CMDER_ROOT}/vendor/user_profile.sh.default" "${cmder_user_profile_path}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user