Devi avviare esplicitamente una shell bash
interattiva alla fine dello script per mantenere la finestra aperta quando apri il file .command
da Finder.
La seguente revisione del tuo script lo dimostra e semplifica anche altri aspetti del tuo codice:
#!/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
Questo file .command
sarà anche da una finestra terminale esistente, ma tieni presente che entrerai in una shell child interattiva - exit
ing da quella shell figlio ritorno a quello originale.
È possibile modificare lo script in modo tale che se lo si richiama da una finestra di terminale esistente (shell), modifica l'ambiente della shell direttamente , ma poi si deve source
/ .
lo script su invocazione (ad es. . ./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