3 votos

Abrir la ventana del terminal con las variables de entorno predefinidas (incluyendo `PATH`)

Estoy tratando de crear un .command que abrirá una ventana de terminal con las variables de entorno predefinidas (incluyendo PATH ).

He probado esto:

#!/bin/bash

# Adding CMake to Path
export PATH=$PATH:/Users/Shared/CMake/CMake.app/Contents/bin/:

# Adding Ninja to Path
export PATH=$PATH:/Users/Shared/Ninja/:

# Adding GCC to Path
export PATH=$PATH:/usr/local/gcc-8.2/bin/:

echo Path Updated

Sin embargo, cuando hago doble clic en Finder me sale esto:

Path Updated
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
Deleting expired sessions...none found.

[Process completed]

Es decir, se ha ido.

¿Hay alguna manera de tener un archivo que haga lo siguiente (Tal vez tiene que ser 2 archivos diferentes, no lo sé):

  1. Si se hace clic desde el buscador se abrirá una nueva ventana de terminal con todas las variables definidas / actualizadas (Incluyendo el PATH ).
  2. Si se ejecuta desde la terminal, actualizará el estado actual de la misma.

¿Alguna idea?

6voto

Felix Andersen Puntos 604

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

0 votos

Buen trabajo de todos, la conversación ha sido trasladado al chat .

0 votos

@bmike, El problema es que no puedo hablar por el chat (No tengo suficiente reputación) así que básicamente me has dejado fuera. Además prefiero que el inicio de la discusión quede aquí.

0 votos

¿Por qué no puedes chatear con @Royi? Tienes más de 20 rep requeridos ... avísanos y veré si puedo invitarte explícitamente a la conversación

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X