Que signifie «cd &»?

8

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-repositorycar 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 :)

GLenn
la source
1
Quelque chose qui ne peut pas être trouvé avec Google est l' ogooglebar , un néologisme suédois.
Chloé
Lorsque je tape ma question, le résultat de la recherche concernait le disque compact. Ungoogleable :)
GLenn
3
"J'ai utilisé cd * parce que le nom du dossier est long pour moi, désolé d'être paresseux". Tapez simplement cd <TAB>et le nom du dossier unique sera développé automatiquement.
Bakuriu

Réponses:

20

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). cdest 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é.

[1] 7519

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 bashet la section JOB CONTROL.

Pour référence, la question Pourquoi ne exit &fonctionne pas? porte une certaine similitude.

Miroslav Koškár
la source
Que la fin du travail soit signalée immédiatement ou à l'invite suivante dépend du shell. Dans fishet zsh, il est rapporté immédiatement. Dans bashet d'autres shells POSIX ou (t) csh, cela dépend du réglage de l' notifyoption (désactivé par défaut) ( zshétant un shell de type POSIX a également une notifyoption, mais il est désactivé par défaut, sauf si on lui dit d'émuler un autre shell)
Stéphane Chazelas
1

L' &opérateur envoie un processus en arrière-plan; Comme vous cdpouvez l'exécuter sans arguments, vous l'exécutez et l'envoyez en arrière-plan. Si vous prenez la page de manuel:

NOM

cd - Changer le répertoire de travail du shell.

SYNOPSIS

cd[ -L| -P] [ dir ]

LA DESCRIPTION

Modifiez le répertoire de travail du shell.

Remplacez le répertoire actuel par DIR . Le DIR par défaut est la valeur de la HOMEvariable shell.

La variable CDPATHdéfinit le chemin de recherche du répertoire contenant DIR . Les noms de répertoire alternatifs dans CDPATHsont séparés par deux points (:).
Un nom de répertoire nul est le même que le répertoire actuel. Si DIR commence par une barre oblique ( /), il CDPATHn'est pas utilisé.

Si le répertoire n'est pas trouvé et que l'option shell cdable_varsest définie, le mot est supposé être un nom de variable. Si cette variable a une valeur, sa valeur est utilisée pour DIR .

Options:

-Lforcer les liens symboliques à être suivis
-Putiliser la structure du répertoire physique sans suivre les liens symboliques

La valeur par défaut est de suivre les liens symboliques, comme s'ils -Létaient spécifiés.

Statut de sortie:

Renvoie 0 si le répertoire est modifié; non nul sinon.

VOIR ÉGALEMENT

bash(1)

LA MISE EN OEUVRE

GNU bash, version 4.1.5 (1) -release (i486-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
Licence GPLv3 +: GNU GPL version 3 ou ultérieure

Vous pouvez voir que les arguments sont facultatifs. Donc

cd &est traité en tant que cd, puis envoyé en arrière-plan. Lorsque cdest 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.

bash$ sleep 30 &
[1] 3586

Notez que lorsqu'un processus est forké, le PID enfant est stocké dans la variable spéciale $!

bash$ echo $!
3586

Vous pouvez terminer le travail par son numéro de travail comme suit:

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$
vfbsilva
la source
5
Fermer, mais pas tout à fait. Tout d'abord, ce n'est pas ce qui cdest 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, cdsans arguments fait quelque chose: il vous emmène dans votre HOMErépertoire. Mais, puisque vous l'avez bifurqué en arrière-plan, il n'y a aucun effet dans ce cas.
Warren Young
@WarrenYoung de la page de manuel indique que cd prendra le répertoire personnel si aucune valeur ne lui est affectée. Lors d'un changement de répertoire réussi, ne reçoit-il pas la valeur de $ pwd?
vfbsilva
1
Le répertoire de travail actuel du processus d'arrière-plan est affecté, pas le shell Bash de premier plan.
Warren Young