Rendre la fonction ~ / .bashrc appelable pour configurer un environnement

2

J'ai une application installée, appelons-la my_appque je souhaite pouvoir appeler depuis la ligne de commande. Il est situé dans /Applications/my_app.app/Contents/Resources.

Donc, ce que j'espérais faire, c'était d'avoir le ~/.bashrclook suivant:

# .bashrc

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

et ensuite, chaque fois que je veux pouvoir utiliser l'application depuis une nouvelle session de terminal, je charge un appel my_app-startaprès quoi, je m'attends à ce que mon application soit appelable en tapant simplement my_appn'importe où sur mon système. Cependant, mon terminal ne reconnaît pas la my_app-startfonction ... Sur une autre plate-forme Linux, cela fonctionne pour moi, mais peut-être que les Mac ont besoin de jouer avec ~ / .bash_profile. Je n'ai jamais compris la différence.

  1. Comment puis-je rendre la fonction automatiquement appelable?
  2. Cette méthode est-elle un moyen sûr et judicieux de charger mon application?
Dipole
la source

Réponses:

3

Votre fonction ne fonctionne pas car OS X démarre votre shell en tant que shell de connexion. Ainsi, .bashrc n'est pas lu. Je ne voudrais pas utiliser une fonction dans ce cas. S'il n'y a qu'un seul fichier exécutable /Applications/my_app.app/Contents/Resources/, j'utiliserais un alias.

J'utiliserais des fichiers séparés lors de la modification de votre environnement. Définissez votre PATH et le contenu de ce / ces fichier (s), puis, à tout moment, sourcez votre fichier d’environnement et votre bon départ. Par exemple, le jeu d’outils AST est installé. Je teste les outils fournis par AST, mais je dois utiliser le PATH minimum fourni par OS X et le PATH associé aux outils AST. Donc, je dois modifier mon PATH qui est défini dans mon .profile. J'ai créé un fichier .astenv dans mon dossier personnel.

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

Pour utiliser ce fichier de configuration, je peux démarrer une nouvelle session de terminal et source le fichier,

. ~/.astenv

ou dans ma session de terminal en cours, démarrez une nouvelle instance de mon shell, puis sourcez le fichier.

ksh
. ~/.astenv

Quand j'ai exitce shell, je suis de retour dans mon environnement d'origine.

fd0
la source
Ok merci pour la clarification sur le shell de connexion. Je ne suis pas tout à fait sûr de votre deuxième point. Pourriez-vous élaborer (je ne suis pas un utilisateur très expérimenté de Linux)
Dipole
2

Pourquoi ne pas simplement créer un lien symbolique dans /usr/local/bin?

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

Vous ne devrez créer aucune fonction dans .bashrc

En fait, ce que j’ai fait avec les scripts que j’ai écrits et qui ont plusieurs versions, c’est de créer un lien symbolique vers un fichier avec le texte "-latest", puis de copier la dernière version dans ce fichier.

Mon lien symbolique ressemble à ceci:

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

Chaque fois que j'ai une nouvelle version, je copie simplement my_app-latest.appet tout est mis à jour.

Allan
la source
Intéressant - le lien symbolique est-il actif ou dois-je l'appeler chaque fois que j'ouvre un nouveau terminal? La raison pour laquelle je voulais le faire via une fonction est pour que je puisse choisir de configurer l'environnement ou pas lorsque j'ouvre un nouveau terminal.
Dipole
J'ai aussi lu que, dans l'idéal, vous devriez créer un lien vers cette page /usr/local/sbin, sans /usr/sbintoutefois que je ne sache pas pourquoi.
Dipole
Le lien symbolique est permanent. Chaque fois que vous ouvrez un terminal, il sera disponible puisqu'il se trouve sur votre chemin. Cela peut être /usr/local/sbin... entre FreeBSD, OS X, Linux et Windows, il est difficile de les garder tous droits.
Allan
2
/usr/sbinn’est pas accessible en écriture sur El Capitan, je l’ai modifiée /usr/local/binen réponse.
nohillside
@patrix J'apprécie ... j'étais sur ma Surface Pro 3 hier et je n'ai pas pu tester
Allan