¿Qué significa "cd &"?

8

Sé cómo cambiar el directorio desde la terminal escribiendo

cd <directory>

Pero aquí está el escenario. Estaba usando terminal para ir a la carpeta de mi repositorio git.

  • repositorios glenn
    • repositorio-glenn-remdroid

Dada la estructura de carpetas anterior, quiero cambiar glenn-remdroid-repositoryporque es mi repositorio haciendo.

cd glennRepositories

Antes de cambiar al repositorio glenn-remdroid, escribí el comando por error

cd & 

en lugar de cd *. Solía cd *porque el nombre de la carpeta es largo para mí, perdón por ser flojo.

Cuando ejecuto el cd &, el terminal responde

[1] 7519

Cuando ejecuto cd *esto ahora sucede

[1]+  Done                    cd  (wd: ~/glennRepositories)
(wd now: ~/glennRepositories/glenn-remdroid-repository)

¿Alguien lo que cd &significa y su salida? Google no sabe mi pregunta :)

GLenn
fuente
1
Algo que no se puede encontrar con Google es ogooglebar , un neologismo sueco.
Chloe
Cuando escribí mi pregunta, el resultado de la búsqueda fue sobre disco compacto. Ungoogleable :)
GLenn
3
"Utilicé cd * porque el nombre de la carpeta es largo para mí, perdón por ser flojo". Simplemente escriba cd <TAB>y el nombre de la carpeta única se expandirá automáticamente.
Bakuriu el

Respuestas:

20

Al escribir el &final de la línea de comando, le está indicando a su shell que tome la canalización de comandos (en este caso, un solo comando) y lo ejecute en un sub-shell en segundo plano (sin esperar un resultado). cdes un bash incorporado, pero eso no es importante aquí. No afectará a su shell "padre" de ninguna manera, por lo que su directorio de trabajo no cambiará.

[1] 7519

Esta línea informa que hay un trabajo ejecutándose en segundo plano identificado por el número 1 y la ID del proceso es 7519. Se imprimirá algo similar si ejecuta, por ejemplo, vimy luego presiona Ctrl+ Zpara suspenderlo. Cuando finalice el proceso, el shell no informará de eso hasta el próximo ciclo de procesamiento (por ejemplo, simplemente presione Returnuna vez más) y luego imprimirá los trabajos de listado de actualización finalizados.

Para más detalles por favor lea man bashy la sección JOB CONTROL.

Como referencia, la pregunta ¿Por qué exit &no funciona? tiene alguna similitud.

Miroslav Koškár
fuente
Si el final del trabajo se informa de inmediato o en el siguiente indicador depende del shell. En fishy zsh, se informa de inmediato. En bashy otros shells POSIX o (t) csh, depende de la configuración de la notifyopción (desactivado de forma predeterminada) ( zshser un shell similar a POSIX también tiene una notifyopción, pero está apagado de manera predeterminada a menos que se le indique que emule otro shell)
Stéphane Chazelas
1

El &operador envía un proceso a segundo plano; como cdse puede ejecutar sin argumentos, lo está ejecutando y enviándolo a segundo plano. Si toma la página de manual:

NOMBRE

cd: cambia el directorio de trabajo del shell.

SINOPSIS

cd[ -L| -P] [ dir ]

DESCRIPCIÓN

Cambiar el directorio de trabajo del shell.

Cambiar el directorio actual a DIR . El DIR predeterminado es el valor de la HOMEvariable de shell.

La variable CDPATHdefine la ruta de búsqueda para el directorio que contiene DIR . Los nombres de directorio alternativos CDPATHestán separados por dos puntos (:).
Un nombre de directorio nulo es el mismo que el directorio actual. Si DIR comienza con una barra inclinada ( /), entonces CDPATHno se usa.

Si no se encuentra el directorio y se establece la opción de shell cdable_vars, se supone que la palabra es un nombre de variable. Si esa variable tiene un valor, su valor se usa para DIR .

Opciones:

-Lforzar que se sigan enlaces simbólicos
-Puse la estructura de directorio físico sin seguir enlaces simbólicos

El valor predeterminado es seguir enlaces simbólicos, como si -Lse especificaran.

Estado de salida:

Devuelve 0 si se cambia el directorio; de lo contrario no es cero.

VER TAMBIÉN

bash(1)

IMPLEMENTACIÓN

GNU bash, versión 4.1.5 (1) -release (i486-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
Licencia GPLv3 +: GNU GPL versión 3 o posterior

Puedes ver que los argumentos son opcionales. Entonces

cd &se procesa como cdy luego se envía al fondo. Cuando cdse llama sin argumento, no se necesita procesamiento. Entonces pasa al fondo como "hecho" (procesado).

Alguna información sobre & The Bash &(ampersand) es un operador de control incorporado que se utiliza para bifurcar procesos. Desde la página de manual de Bash, "Si el operador de control termina un comando &, el shell ejecuta el comando en segundo plano en un subshell".

Si inicia sesión en un shell interactivo, al proceso se le asigna un número de trabajo y se muestra el PID secundario. El número de trabajo a continuación es uno.

bash$ sleep 30 &
[1] 3586

Tenga en cuenta que cuando se bifurca un proceso, el PID secundario se almacena en la variable especial $!

bash$ echo $!
3586

Puede terminar el trabajo por su número de trabajo de la siguiente manera:

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$
vfbsilva
fuente
55
Cerca, pero no del todo. Primero, no cdse ejecuta y luego se envía a un segundo plano. El proceso en segundo plano se crea realmente antes de que el programa se ejecute en el caso de un comando regular; en el caso de un incorporado, este comportamiento es emulado. El comando se ejecuta mediante este proceso en segundo plano, reemplazándolo. Segundo, cdsin argumentos hace algo: te lleva a tu HOMEdirectorio. Pero, dado que lo bifurcas en el fondo, no hay ningún efecto en este caso.
Warren Young el
@WarrenYoung de la página de manual dice que cd tomará el directorio de inicio si no se le asigna ningún valor. Tras un cambio de directorio exitoso, ¿no recibe el valor de $ pwd?
vfbsilva
1
El directorio de trabajo actual del proceso en segundo plano se ve afectado, no el shell Bash en primer plano.
Warren Young