J'ai lu cette question et sa réponse, mais cela ne correspond pas à mon problème, même si c'est similaire.
J'écris un script (appelé cpj) qui lancera l'un de mes projets en cours. J'en ai environ 5. Quand je tape
$ cpj blah
Je veux que le répertoire de travail actuel se transforme en répertoire de projet blah (que je tiens dans $ PROJDIR) et je veux qu'emacsclient ouvre le fichier principal de ce projet (que je tiens dans $ MAINFILE).
La question que j'ai citée dit que vous ne pouvez pas changer directement l'environnement du shell exécutant le script, mais vous pouvez source un script et il le fera.
Pour tester cela, j'ai écrit un script shell (appelé chcwd) qui a une ligne:
cd $1
Si, à partir de la ligne de commande, je fais:
$ . chcwd $PROJDIR
mon répertoire de travail actuel changera comme je le souhaite. Si, en revanche, à partir de mon script cpj, j'ai la même ligne:
. chcwd $PROJECT
cela ne changera pas le répertoire de travail actuel du shell. Je me rends compte que j'exécute 2 scripts (cpj puis chcwd), et donc que je crée 2 shells, mais je ne vois aucun moyen de faire ce que je veux. Quelqu'un peut-il me montrer comment atteindre mon objectif?
la source
J'ai un script similaire écrit pour mon usage personnel. Il existe une astuce très simple pour modifier le répertoire de travail dans un script. Écrivez d'abord votre script, in.ex .:
Supposons maintenant que le script s'appelle «cdto». Pour le faire fonctionner, vous devez le source dans le shell actuel, ce qui peut être réalisé par «source» ou «.» (les deux sont identiques). En ex.:
Maintenant, pour le rendre plus pratique:
Copiez le script 'cdto' dans un répertoire 'bin' de votre compte (dans ex. / Home / johnsmith / bin - créez-le s'il n'existe pas). Vérifiez votre variable PATH pour vous assurer que le répertoire «bin» est inclus:
echo $ PATH
Sinon, modifiez votre fichier .profile et ajoutez:
Ajoutez un alias à votre fichier .bashrc ou .bash_aliases:
alias cdto = '. cdto '
Et c'est fait. Après la prochaine connexion ou lorsque vous ouvrez un nouveau terminal, vous pouvez simplement utiliser in.ex .:
Prendre plaisir :-)
Sebastian Piech
la source
Une astuce simple pour ce faire:
Maintenant, le répertoire de travail est $ PROJECT.
la source