Est-il possible de “unsource” en bash?
J'ai acheté un script en bash source somescript.sh
. Est-il possible d'annuler cette sans redémarrer le terminal? Sinon, est-il un moyen de "réinitialiser" le shell pour les réglages, il obtient lors de la connexion, sans avoir à redémarrer?
EDIT: Comme le suggère l'une des réponses, mon script définit quelques variables d'environnement. Est-il un moyen de réinitialiser la connexion par défaut de l'environnement?
- Je ne pense pas que "unsource" qui peut être fait en bash. Vous devrez créer un autre script avec des tas de
unset
commandes de tout défaire. - est votre problème, surtout que vous avez écrasé votre DURÉE variable et votre session de terminal a disparu déglingués? Si oui, il pourrait aider à modifier votre question pour que ce soit clair. Bonne chance.
- J'ai présenté une modification de cette question pour changer le 'terminal' à 'shell'. Vous souhaitez réinitialiser votre shell (bash), pas le terminal (xterm par exemple) dans lequel la coquille est en cours d'exécution. Est ce que le droit?
- pouvez-vous donner un exemple de quelques-unes des choses que vous souhaitez l'annuler? Les variables d'environnement et les alias, ce genre de chose? Je veux être sûr que vous ne voulez réinitialiser le shell, et de ne pas réinitialiser le terminal (comme le titre de la fenêtre du terminal).
- Je ne vois toujours une réponse concluante... j'ai envie de retrouver le même environnement que lorsque je la première connexion, sans fermeture et de l'ouverture d'un nouveau shell.
- Retour à la connexion initiale environnement sans avoir besoin de redémarrer la session est aussi ce que je suis intéressé.
exec $SHELL
n'est pas tout à fait cela, depuis exporté variables shell à partir de l'appel de la coquille va rester ensemble dans cet état.
Vous devez vous connecter pour publier un commentaire.
Il est généralement suffisant de simplement re-exec dans un shell:
Ce n'est pas garanti pour annuler quoi que ce soit (sourcing, le script peut supprimer des fichiers, ou l'exécution de toute commande arbitraire), mais si vos scripts d'installation sont bien écrits, vous obtiendrez un milieu relativement propre. Vous pouvez aussi essayer:
Noter que deux de ces solutions supposent que vous parlez de la réinitialisation de votre shell en cours, et non pas de votre terminal (sig?)indiqué dans la question. Si vous souhaitez réinitialiser le terminal, essayez
su - $(whoami)
a fonctionné pour moi.exec su - $(whoami)
. De la saisie d'un mot de passe (demandé par la ligue) est une sorte de gênant cependant.Pas. Trouver un script exécute les commandes qui y sont contenues. Il n'y a aucune garantie que le script n'est pas faire des choses qui ne peuvent pas être annulées (comme la suppression de fichiers ou de quoi que ce soit).
Si le script n'définit quelques variables et/ou les pistes inoffensive commandes, vous pouvez annuler son action par la suppression de ces mêmes variables, mais même alors, le script peut avoir remplacé les variables qui avaient déjà des valeurs avant avec de nouveaux, et de l'annuler, vous auriez à vous rappeler les anciennes valeurs ont été.
Si vous la source d'un script qui définit quelques variables de votre environnement, mais vous voulez que ce soit infaisable, je vous suggère de commencer une nouvelle (sous)l'invité de commande et la source du script en shell interne est exécuté. Alors pour rétablir l'environnement ce qu'il était avant, il suffit de quitter le shell interne est exécuté.
La meilleure option semble être d'utiliser
unset
pour annuler les variables d'environnement que l'approvisionnement en produit. L'ajout deOLD_PATH=$PATH; export OLD_PATH
à la.bashrc
profil enregistre une sauvegarde de la connexion de chemin d'accès dans le cas où on a besoin de revenir à l'$PATH
.Pas la solution la plus élégante, mais cela semble faire ce que vous voulez:
Je ne pense pas que l'annulation d'exécuté des commandes est possible dans bash. Vous pouvez essayer de
tset, reset
pour le terminal d'initialisation.