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?
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.
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:
. dow
pour que le script s’exécute dans le contexte du shell actuel.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.