Je veux exécuter un script pour changer simplement le répertoire de travail actuel:
#!/bin/bash
cd web/www/project
Mais, après que je l'utilise, le pwd actuel reste inchangé! Comment puis je faire ça?
bash
scripting
environment-variables
cd-command
Sony Santos
la source
la source
return
pour échapper à un script créé de cette manière, nonexit
, elles ressemblent à des fonctions de shell etexit
vont quitter le shell qui a généré le script.source ./script
le même?.
etsource
sont égaux en bash. 2. nous n'avons pas besoin d'utiliser./
avant nom_fichier s'il se trouve dans le même répertoire. C'est ok pour ne courir que ça:. script
Pour de petites tâches telles que celle-ci, au lieu de créer un script, créez un alias comme celui-ci,
Vous devez l'ajouter à votre
.bashrc
fichier si vous souhaitez le définir pour chaque shell interactif.Maintenant, vous pouvez exécuter ceci en tant que
$ cdproj
.la source
eval `./script`
oueval $(./script)
d'exécuter ces commandes. Il s'agit d'une approche courante pour les commandes devant mettre à jour l'environnement du shell appelant.eval
approche.Utiliser
exec bash
à la finCependant, cette question est souvent posée car on veut être laissé à l’invite de bash dans un certain répertoire après l’exécution d’un script bash depuis un autre répertoire.
Si tel est le cas, exécutez simplement une instance de l'enfant bash à la fin du script:
Cela crée un nouveau sous-shell. Tapez
exit
pour revenir au premier shell où le script a été initialement lancé.la source
exec
est généralement considéré comme le dernier recours d'un scélérat .. :)exit
(ou en appuyant sur Ctrl + D), vous devrez le faire 11 à 21 fois. (2) L'utilisation d'un script exécutable présente un autre inconvénient: si vous définissez des options de shell (par exemple,dotglob
ouglobstar
) dans votre session de shell interactive, vous les perdrez, car vous démarrez un nouveau shell.Bien qu'il existe des réponses qui effectuent l'action exacte souhaitée, une méthode plus standard consiste à créer un lien symbolique:
Ensuite, vous pouvez accéder
cd
au répertoire en utilisant le nomproj
:Cette méthode est plus flexible car vous pouvez accéder aux fichiers en utilisant le nom abrégé sans
cd
:la source
Si vous passez d'un répertoire à l'autre dans le système de fichiers. Je recommanderai autojump .
la source
Selon ce que vous allez faire, une autre solution peut être de créer une fonction au lieu d’un script.
Exemple:
Créez une fonction dans un fichier, disons
/home/aidin/my-cd-script
:Ensuite, incluez-le dans votre fichier
bashrc
ouzshrc
:Maintenant, vous pouvez l'utiliser comme une commande:
la source
Pourquoi ne pas utiliser "exec", il semble faire exactement ce que je souhaite.
la source
exit
(ou en appuyant sur Ctrl + D), vous devrez le faire 11 à 21 fois.dotglob
ouglobstar
), vous les perdrez, car vous démarrez un nouveau shell. … (Suite)Vous pouvez le faire en utilisant une fonction ou en utilisant &&. Les exemples ci-dessous installent Zabbix et créent un fichier contenant une ligne.
Ex:
ou:
la source