Je sais comment changer le répertoire du terminal en tapant
cd <directory>
mais voici le scénario. J'utilisais le terminal pour aller sur le dossier de mon dépôt git.
- glennRepositories
- référentiel glenn-remdroid
Compte tenu de la structure des dossiers ci-dessus, je veux basculer glenn-remdroid-repository
car c'est mon référentiel en le faisant.
cd glennRepositories
Avant de basculer dans glenn-remdroid-repository, j'ai tapé par erreur la commande
cd &
au lieu de cd *
. J'ai utilisé cd *
parce que le nom du dossier est long pour moi, désolé d'être paresseux.
Lorsque j'exécute le cd &
, le terminal répond
[1] 7519
Quand j'exécute, cd *
c'est maintenant arrivé
[1]+ Done cd (wd: ~/glennRepositories)
(wd now: ~/glennRepositories/glenn-remdroid-repository)
Quelqu'un at-il ce que cd &
signifie et sa sortie? Google ne connaît pas ma question :)
shell
cd-command
GLenn
la source
la source
cd <TAB>
et le nom du dossier unique sera développé automatiquement.Réponses:
En écrivant le
&
à la fin de la ligne de commande, vous demandez à votre shell de prendre le pipeline de commandes (dans ce cas, une seule commande) et de l'exécuter dans un sous-shell en arrière-plan (sans attendre de résultat).cd
est un bash intégré, mais ce n'est pas important ici. Cela n'affectera en aucune façon votre shell "parent", donc votre répertoire de travail ne sera pas modifié.Cette ligne signale qu'un travail s'exécute en arrière-plan identifié par le numéro 1 et l'ID de processus est 7519. Une chose similaire sera imprimée si vous exécutez par exemple
vim
, puis appuyez sur Ctrl+ Zpour le suspendre. Lorsque le processus se termine, le shell ne le signale pas jusqu'au prochain cycle de traitement (par exemple, il suffit de frapper Returnà nouveau), puis il imprime la liste des travaux de mise à jour terminée.Pour plus de détails, veuillez lire
man bash
et la sectionJOB CONTROL
.Pour référence, la question Pourquoi ne
exit &
fonctionne pas? porte une certaine similitude.la source
fish
etzsh
, il est rapporté immédiatement. Dansbash
et d'autres shells POSIX ou (t) csh, cela dépend du réglage de l'notify
option (désactivé par défaut) (zsh
étant un shell de type POSIX a également unenotify
option, mais il est désactivé par défaut, sauf si on lui dit d'émuler un autre shell)L'
&
opérateur envoie un processus en arrière-plan; Comme vouscd
pouvez l'exécuter sans arguments, vous l'exécutez et l'envoyez en arrière-plan. Si vous prenez la page de manuel:Vous pouvez voir que les arguments sont facultatifs. Donc
cd &
est traité en tant quecd
, puis envoyé en arrière-plan. Lorsquecd
est appelé sans argument, aucun traitement n'est nécessaire. Il passe donc en arrière-plan comme "terminé" (traité).Quelques informations concernant
&
The Bash&
(esperluette) est un opérateur de contrôle intégré utilisé pour bifurquer les processus. A partir de la page de manuel Bash, "Si une commande est interrompue par l'opérateur de contrôle&
, le shell exécute la commande en arrière-plan dans un sous-shell".S'il est connecté à un shell interactif, le processus se voit attribuer un numéro de travail et le PID enfant s'affiche. Le numéro de travail ci-dessous est un.
Notez que lorsqu'un processus est forké, le PID enfant est stocké dans la variable spéciale
$!
Vous pouvez terminer le travail par son numéro de travail comme suit:
la source
cd
est exécuté, puis envoyé à l'arrière-plan. Le processus d'arrière-plan est réellement créé avant l'exécution du programme dans le cas d'une commande régulière; dans le cas d'un intégré, ce comportement est émulé. La commande est exécutée par ce processus d'arrière-plan, en le remplaçant. Deuxièmement,cd
sans arguments fait quelque chose: il vous emmène dans votreHOME
répertoire. Mais, puisque vous l'avez bifurqué en arrière-plan, il n'y a aucun effet dans ce cas.