Rendere la funzione ~ / .bashrc richiamabile per impostare un ambiente


2

Ho un'app installata che consente di chiamarla my_appche desidero poter chiamare dalla riga di comando. Si trova in /Applications/my_app.app/Contents/Resources.

Quindi quello che speravo di fare era avere il mio ~/.bashrcaspetto come il seguente:

# .bashrc

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

e poi ogni volta che voglio essere in grado di utilizzare l'app da una nuova sessione di terminale, caricherò la chiamata my_app-startdopo la quale mi aspetto che la mia app sia richiamabile semplicemente digitando un my_apppunto qualsiasi sul mio sistema. Tuttavia il mio terminale non riconosce la my_app-startfunzione ... Su un'altra piattaforma Linux questo funziona per me, ma forse i Mac hanno bisogno di giocherellare con ~ / .bash_profile. Non ho mai capito la differenza.

  1. Come posso richiamare automaticamente la funzione?
  2. Questo metodo è un modo sicuro e ragionevole per caricare la mia applicazione?

Risposte:


3

La tua funzione non funziona perché OS X avvia la shell come shell di accesso, pertanto .bashrc non viene letto. Non vorrei usare una funzione in questo caso. Se è presente un solo file eseguibile /Applications/my_app.app/Contents/Resources/, utilizzare un alias.

Vorrei utilizzare file separati quando si cambia l'ambiente. Imposta il tuo PERCORSO e qualunque cosa in questi / questi file, quindi in qualsiasi momento trova il tuo file di ambiente e il tuo bene andare. Ad esempio, ho installato il set di strumenti AST. Sto testando gli strumenti forniti da AST ma devo usare il PATH minimo fornito da OS X e il PATH agli strumenti AST. Quindi, devo modificare il mio PERCORSO che è impostato nel mio .profile. Ho creato un file .astenv nella mia cartella home.

#
#  .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

Per utilizzare questo file di configurazione, posso avviare una nuova sessione terminale e creare il file,

. ~/.astenv

o nella mia sessione terminale corrente avvia una nuova istanza della mia shell, quindi sorgente il file.

ksh
. ~/.astenv

Quando ho exitquesta shell, sono tornato al mio ambiente originale.


Ok grazie per il chiarimento sulla shell di login. Non sono esattamente sicuro del tuo secondo punto, potresti per favore elaborare (non sono un utente Linux molto esperto)
Dipole,

2

Perché non creare semplicemente un collegamento simbolico in /usr/local/bin?

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

Non dovrai creare alcuna funzione in .bashrc

In effetti, ciò che ho fatto con gli script che ho scritto con più versioni, è creare un link simbolico a un file con il testo "-latest" e quindi copiare l'ultima versione in quel file.

Il mio link simbolico è simile al seguente:

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

Ogni volta che ho una nuova versione, copio my_app-latest.appe tutto viene aggiornato.


Interessante: il collegamento simbolico è permanente o devo chiamarlo ogni volta che apro un nuovo terminale? Il motivo per cui volevo farlo tramite una funzione è che potevo scegliere di impostare l'ambiente o meno quando apro un nuovo terminale.
Dipole,

Ho anche letto che idealmente dovresti collegarti /usr/local/sbine non /usr/sbinanche se non sono sicuro del perché.
Dipole,

Il link simbolico è permanente. Ogni volta che apri il terminale, sarà disponibile poiché è sul tuo percorso. Potrebbe essere /usr/local/sbin... tra FreeBSD, OS X, Linux e Windows, è difficile tenerli tutti dritti.
Allan,

2
/usr/sbinnon è scrivibile dall'utente su El Capitan, l'ho modificato /usr/local/binnella tua risposta.
Nohillside

@patrix Apprezzo il fatto che ... ieri ero sul mio Surface Pro 3 e non potevo provarlo
Allan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.