Es necesario iniciar explícitamente una sesión interactiva bash
shell al final de su script para mantener la ventana abierta cuando abra el .command
desde el Finder.
La siguiente revisión de su script demuestra eso y también agiliza otros aspectos de su código:
#!/bin/bash
# Note: $PATH already exists as an exported variable, assigning to it
# again preserves that status, so there's no need to call `export` below.
# Adding CMake to Path
PATH+=:/Users/Shared/CMake/CMake.app/Contents/bin/
# Adding Ninja to Path
PATH+=:/Users/Shared/Ninja/
# Adding GCC to Path
PATH+=:/usr/local/gcc-8.2/bin/
cat <<EOF
Path updated to:
$PATH
Starting interactive Bash shell...
EOF
# Start an interactive Bash shell that inherits this script's environment
# and keeps the window open.
# Using -l makes the interactive shell a login shell, which makes it
# load the same initialization files as shells created by Terminal.app,
# notably, ~/.bash_profile
# Be sure that ~/.bash_profile doesn't override $PATH.
exec bash -l
Este .command
también desde un archivo existente terminal pero tenga en cuenta que entrará en una ventana interactiva niño cáscara - exit
de ese caparazón infantil te devolverá al original.
Es posible modificar tu script para que si lo invocas desde una ventana de terminal existente (shell), modifique el entorno de ese shell directamente pero luego hay que source
/ .
el script en la invocación (por ejemplo, . ./script.command
):
#!/bin/bash
# Note: $PATH already exists as an exported variable, assigning to it
# again preserves that status, so there's no need to call `export` below.
# Adding CMake to Path
PATH+=:/Users/Shared/CMake/CMake.app/Contents/bin/
# Adding Ninja to Path
PATH+=:/Users/Shared/Ninja/
# Adding GCC to Path
PATH+=:/usr/local/gcc-8.2/bin/
# Determine if this script is being sourced.
[[ $0 != "$BASH_SOURCE" ]] && sourced=1 || sourced=0
cat <<EOF
Path updated to:
$PATH
EOF
if (( sourced )); then # sourced from the calling shell.
# The calling shell's environment has been modified - nothing more to do.
:
else # otherwise: launched from Finder or from a terminal without sourcing
# A new interactive shell must be launched for the environment modifications
# to take effect and, if launched from Finder, to keep the terminal window
# open.
echo "Starting new interactive Bash shell with modified environment..."
# Using -l makes the interactive shell a login shell, which makes it
# load the same initialization files as shells created by Terminal.app,
# notably, ~/.bash_profile
# Be sure that ~/.bash_profile doesn't override $PATH.
exec bash -l
fi