web-dev-qa-db-fra.com

Définissez le raccourci de commande permanente dans terminal sur cd sur Téléchargements

J'ai écrit un nouveau fichier texte dans /bin nommé ram qui contient:

watch -n 1 free -h

et un fichier sen:

watch -n 1 sensors

dans le même dossier, afin d'éviter de taper

watch blahblahblah...

à chaque fois.

Aussi, j'ai changé les permissions de ces deux depuis

-rw-r--r--

à

-rw-r--r-x

et atteint mon objectif. Cela a fonctionné même après la réouverture de Shell, c’est-à-dire que j’ai pu taper ram au lieu de watch -n 1 free -h

Mais, le problème a été rencontré après avoir essayé la même procédure pour

cd /home/myname/Downloads/

et nouveau fichier texte enregistré dans /bin et nommé dow, de même que les autorisations.

Cette fois dow ne fait rien dans le terminal, même ne montrant aucun message.

J'ai essayé d'enregistrer le même fichier dans /usr/bin, mais encore une fois, le terminal ne fait rien et mon répertoire de travail ne change pas.

Comment est-ce possible?

5
mk1024

Vous avez écrit un script et cela fonctionne. Il ne fait tout simplement pas ce que vous voulez, car un script s'exécute dans un shell distinct de celui qui l'appelle.

Le shell dans lequel le script est exécuté fait exactement ce que le script lui dit; il change son répertoire de travail en ~/Downloads. Il n’ya rien d’autre à faire, alors il existe. Le répertoire du shell appelant n'a pas été modifié.

Vous n'êtes pas obligé de prendre ma Parole pour cela - vous pouvez la démontrer en ajoutant ls à la ligne suivante de votre fichier dow. Le contenu de votre répertoire ~/Downloads (en supposant qu’il en ait) sera alors répertorié lorsque vous exécuterez la commande (sans les couleurs habituelles fournies par un alias de votre ~/.bashrc que les shells non interactifs ne 't pas lu).

Pour exécuter un script dans le shell actuel, vous pouvez utiliser la commande source, qui peut également être écrite sous la forme . file. Donc, si vous tapez

. dow

Votre shell actuel changera de répertoire.

Ou, vous pouvez plutôt définir un alias:

zanna@toaster:~$ alias dow='cd $HOME/Downloads'
zanna@toaster:~$ dow
zanna@toaster:~/Downloads$ 

Pour le rendre permanent, ajoutez la ligne

alias dow='cd $HOME/Downloads'

dans votre fichier ~/.bashrc. Il sera ensuite disponible chaque fois que vous exécuterez un shell interactif.

7
Zanna

Il s'agit d'un doublon intersite: https://stackoverflow.com/a/255415/383694 .

Le problème est que le script est exécuté dans un sous-shell. Le script change de répertoire puis se ferme sans que votre shell actuel soit modifié.

Deux atténuations:

  1. exécutez . dow pour que le script s’exécute dans le contexte du shell actuel.
  2. utilisez un alias, par exemple dans votre fichier ~/.bashrc qui modifie le répertoire, par exemple alias dow="cd /home/myname/Downloads/".

Si vous changez de répertoire, c'est généralement une bonne idée de vérifier que cela a fonctionné avant de faire autre chose.

Il y a d'autres options dans la question liée.

3
pbhj