Cosa significa "cd &"?


8

So come cambiare directory dal terminale digitando

cd <directory>

ma ecco lo scenario. Stavo usando il terminale per andare nella cartella del mio repository git.

  • glennRepositories
    • Glenn-remdroid-repository

Data la struttura delle cartelle sopra, voglio passare glenn-remdroid-repositoryperché è il mio repository facendo.

cd glennRepositories

Prima di passare al repository glenn-remdroid, ho erroneamente digitato il comando

cd & 

invece di cd *. L'ho usato cd *perché il nome della cartella è lungo per me, mi spiace di essere pigro.

Quando eseguo il cd &, il terminale risponde

[1] 7519

Quando eseguo cd *questo è ora successo

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

Qualcuno cosa cd &significa e il suo output? Google non conosce la mia domanda :)


1
Qualcosa che non può essere trovato con Google è ogooglebar , un neologismo svedese.
Chloe,

Quando scrivo la mia domanda, il risultato della ricerca riguardava il Compact disc. Ungoogleable :)
GLenn,

3
"Ho usato cd * perché il nome della cartella è lungo per me, scusate se sono pigro". Basta digitare cd <TAB>e il nome della cartella univoca verrà espanso automaticamente.
Bakuriu,

Risposte:


20

Scrivendo alla &fine della riga di comando, stai dicendo alla tua shell di prendere la pipeline di comandi (in questo caso un singolo comando) ed eseguirla in una sotto-shell in background (non aspettando un risultato). cdè un built-in bash, ma qui non è importante. Non influirà in alcun modo sulla shell "parent", quindi la directory di lavoro non verrà modificata.

[1] 7519

Questa riga indica che è in esecuzione un processo in background identificato dal numero 1 e l'ID processo è 7519. Una cosa simile verrà stampata se si esegue ad esempio vime quindi si preme Ctrl+ Zper sospenderlo. Al termine del processo, la shell non lo segnalerà fino al successivo ciclo di elaborazione (ad esempio, basta premere Returnancora una volta) e quindi stamperà i lavori dell'elenco di aggiornamento completati.

Per ulteriori dettagli si prega di leggere man bashe la sezione JOB CONTROL.

Per riferimento, la domanda Perché exit &non funziona? porta una certa somiglianza.


Se la fine del lavoro viene segnalata immediatamente o al prompt successivo dipende dalla shell. In fishe zsh, viene segnalato immediatamente. In bashe altre shell POSIX o (t) csh dipende dall'impostazione notifydell'opzione (disattivata per impostazione predefinita) ( zshessendo una shell simile a POSIX ha anche notifyun'opzione, ma è disattivata per impostazione predefinita a meno che non venga detto di emulare un'altra shell)
Stéphane Chazelas,

1

L' &operatore invia un processo in background; come cdpuò essere eseguito senza argomenti lo stai eseguendo e inviandolo in background. Se prendi la pagina man:

NOME

cd - Cambia la directory di lavoro della shell.

SINOSSI

cd[ -L| -P] [ dir ]

DESCRIZIONE

Cambia la directory di lavoro della shell.

Cambia la directory corrente in DIR . Il DIR predefinito è il valore della HOMEvariabile shell.

La variabile CDPATHdefinisce il percorso di ricerca per la directory contenente DIR . I nomi di directory alternativi in CDPATHsono separati da due punti (:).
Un nome di directory null è uguale alla directory corrente. Se DIR inizia con una barra ( /), CDPATHnon viene utilizzato.

Se la directory non viene trovata e l'opzione shell cdable_varsè impostata, si presume che la parola sia un nome variabile. Se quella variabile ha un valore, il suo valore viene utilizzato per DIR .

Opzioni:

-Lforzare i collegamenti simbolici da seguire
-Putilizzare la struttura di directory fisica senza seguire i collegamenti simbolici

L'impostazione predefinita è seguire i collegamenti simbolici, come se -Lfossero stati specificati.

Stato di uscita:

Restituisce 0 se la directory viene modificata; diverso da zero altrimenti.

GUARDA ANCHE

bash(1)

IMPLEMENTAZIONE

GNU bash, versione 4.1.5 (1) -release (i486-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
Licenza GPLv3 +: GNU GPL versione 3 o successiva

Puoi vedere gli argomenti sono opzionali. Così

cd &viene elaborato come cde quindi inviato in background. Quando cdviene chiamato senza argomento non è necessaria alcuna elaborazione. Quindi va in background come "fatto" (elaborato).

Alcune informazioni su & The Bash &(e commerciale) è un operatore di controllo integrato utilizzato per fork i processi. Dalla pagina man di Bash, "Se un comando viene terminato dall'operatore di controllo &, la shell esegue il comando in background in una subshell".

Se si accede a una shell interattiva, al processo viene assegnato un numero di lavoro e viene visualizzato il PID figlio. Il numero di lavoro di seguito è uno.

bash$ sleep 30 &
[1] 3586

Si noti che quando un processo viene biforcato, il PID figlio viene archiviato nella variabile speciale $!

bash$ echo $!
3586

È possibile terminare il lavoro in base al suo numero di lavoro in questo modo:

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$

5
Chiudi, ma non del tutto. Innanzitutto, non cdviene eseguito e quindi inviato in background. Il processo in background viene effettivamente creato prima dell'esecuzione del programma nel caso di un comando regolare; nel caso di un built-in, questo comportamento viene emulato. Il comando viene eseguito da questo processo in background, sostituendolo. Secondo, cdsenza argomenti fa qualcosa: ti porta nella tua HOMEdirectory. Ma, dal momento che lo hai biforcuto sullo sfondo, non c'è alcun effetto in questo caso.
Warren Young,

@WarrenYoung dalla manpage dice che cd prenderà la home directory se non gli viene assegnato alcun valore. Se la modifica della directory riesce, non riceve il valore di $ pwd?
vfbsilva,

1
La directory di lavoro corrente del processo in background viene interessata, non la shell Bash in primo piano.
Warren Young,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.