2 votos

Hacer que se pueda llamar a la función ~/.bashrc para configurar un entorno

Tengo una aplicación instalada, llamémosla my_app que deseo poder llamar desde la línea de comandos. Se encuentra en /Applications/my_app.app/Contents/Resources .

Así que lo que esperaba era tener mi ~/.bashrc se parece a lo siguiente:

# .bashrc

my_app-start(){
export PATH=$PATH:/Applications/my_app.app/Contents/Resources/
}

y luego cada vez que quiera poder usar la aplicación desde una nueva sesión de terminal cargaría la llamada my_app-start después de lo cual espero que mi aplicación se pueda llamar simplemente escribiendo my_app en cualquier parte de mi sistema. Sin embargo, mi terminal no reconoce el my_app-start función... En otra plataforma linux esto me funciona, pero quizás los Macs necesiten un poco de manipulación de ~/.bash_profile. Nunca he entendido la diferencia.

  1. ¿Cómo puedo hacer que la función se pueda llamar automáticamente?
  2. ¿Es este método una forma segura y sensata de cargar mi aplicación?

3voto

Michael Zhou Puntos 167

Tu función no funciona porque OS X inicia tu shell como shell de inicio de sesión, por lo que el .bashrc no se lee. Yo no usaría una función en este caso. Si sólo hay un archivo ejecutable en /Applications/my_app.app/Contents/Resources/ entonces usaría un alias.

Yo usaría archivos separados cuando cambie su entorno. Establezca su PATH y lo que sea en estos/estos archivos y luego en cualquier momento el origen de su archivo de entorno y su bueno para ir. Como ejemplo, tengo el conjunto de herramientas AST instalado. Estoy probando las herramientas suministradas por AST pero necesito usar el PATH mínimo suministrado por OS X y el PATH de las herramientas AST. Por lo tanto, tengo que modificar mi PATH que está configurado en mi .profile. He creado un archivo .astenv en mi carpeta de inicio.

#
#  .astenv
#
#  The AT&T Software Technology tools from AT&T Research
#
#

PATH=$(/usr/bin/getconf PATH)
ASTPATH=$HOME/local/opt/ast-master/arch/darwin/bin

PATH=$ASTPATH:$PATH
export PATH

Para utilizar este archivo de configuración, puedo iniciar una nueva sesión de terminal y obtener el archivo,

. ~/.astenv

o en mi actual sesión de terminal iniciar una nueva instancia de mi shell y luego el origen del archivo.

ksh
. ~/.astenv

Cuando exit este shell, vuelvo a mi entorno original.

0 votos

Ok, gracias por la aclaración sobre el shell de inicio de sesión. No estoy exactamente seguro de su segundo punto, ¿podría por favor elaborar (no soy un usuario de Linux muy experimentado)

2voto

Douglas Puntos 10417

¿Por qué no crear un enlace simbólico en /usr/local/bin ?

ln -s /foo/bar/hello_world.app /usr/local/bin/hello_world.app

No tendrás que crear ninguna función en .bashrc

De hecho, lo que he hecho con los scripts que he escrito y que tienen varias versiones, es crear un enlace simbólico a un archivo con el texto "-latest" y luego copiar la última versión en ese archivo.

Mi enlace simbólico tiene este aspecto:

ln -s /foo/bar/my_app-latest.app /usr/local/bin/my_app.app

Cada vez que tengo una nueva versión, simplemente la copio en my_app-latest.app y todo se actualiza.

0 votos

Interesante - ¿el enlace simbólico es peramanente o tengo que llamarlo cada vez que abro una nueva terminal? La razón por la que quería hacerlo a través de una función es para poder elegir configurar el entorno o no al abrir una nueva terminal.

0 votos

También he leído que lo ideal sería que se enlazara con /usr/local/sbin y no /usr/sbin aunque no estoy seguro de por qué.

0 votos

El enlace simbólico es permanente. Cada vez que abra el terminal, estará disponible ya que está en su ruta. Puede ser /usr/local/sbin ...entre FreeBSD, OS X, Linux y Windows, es difícil mantenerlos todos en orden.

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