O que significa "cd &"?

8

Eu sei como mudar o diretório do terminal digitando

cd <directory>

mas aqui está o cenário. Eu estava usando o terminal para ir na pasta do meu repositório git.

  • glennRepositories
    • glenn-remdroid-repository

Dada a estrutura de pastas acima, desejo mudar glenn-remdroid-repositoryporque é o meu repositório.

cd glennRepositories

Antes de mudar para o glenn-remdroid-repository, digitei o comando por engano

cd & 

em vez de cd *. Eu usei cd *porque o nome da pasta é longo para mim, desculpe por ser preguiçoso.

Quando executo o cd &, o terminal responde

[1] 7519

Quando executo cd *isso agora aconteceu

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

Alguém o que cd &significa e sua saída? O Google não sabe minha pergunta :)

GLenn
fonte
1
Algo que não pode ser encontrado no Google é o ogooglebar , um neologismo sueco.
Chloe
Quando eu digito minha pergunta, o resultado da pesquisa é sobre o disco compacto. Ungoogleable :)
GLenn
3
"Eu usei cd * porque o nome da pasta é longo para mim, desculpe por ser preguiçoso". Basta digitar cd <TAB>e o nome da pasta exclusiva será expandido automaticamente.
Bakuriu 23/08/13

Respostas:

20

Ao escrever &no final da linha de comando, você está instruindo seu shell a pegar o pipeline de comando (nesse caso, um único comando) e executá-lo em um sub-shell em segundo plano (sem esperar por um resultado). cdé um bash embutido, mas isso não é importante aqui. Isso não afetará seu shell "pai" de forma alguma, portanto seu diretório de trabalho não será alterado.

[1] 7519

Esta linha está relatando que há um trabalho em execução em segundo plano identificado pelo número 1 e o ID do processo é 7519. Uma coisa semelhante será impressa se você executar, por exemplo, vime depois pressionar Ctrl+ Zpara suspendê-lo. Quando o processo terminar, o shell não informará isso até o próximo ciclo de processamento (por exemplo, basta pressionar Returnmais uma vez) e, em seguida, imprimirá a atualização listando os trabalhos concluídos.

Para mais detalhes, leia man bashe a seção JOB CONTROL.

Para referência, a pergunta Por que exit &não funciona? tem alguma semelhança.

Miroslav Koškár
fonte
Se o final do trabalho é relatado imediatamente ou no próximo prompt, depende do shell. No fishe zsh, é relatado imediatamente. Em bashe outros shells POSIX ou (t) csh, depende da configuração da notifyopção (desativado por padrão) ( zshsendo um shell semelhante ao POSIX também tem uma notifyopção, mas é desativado por padrão, a menos que seja solicitado a emular outro shell)
Stéphane Chazelas
1

O &operador envia um processo para segundo plano; como cdpode ser executado sem argumentos, você o está executando e enviando para segundo plano. Se você acessar a página de manual:

NOME

cd - Altere o diretório de trabalho do shell.

SINOPSE

cd[ -L| -P] [ dir ]

DESCRIÇÃO

Mude o diretório de trabalho do shell.

Mude o diretório atual para DIR . O DIR padrão é o valor da HOMEvariável do shell.

A variável CDPATHdefine o caminho de pesquisa para o diretório que contém DIR . Os nomes de diretório alternativos CDPATHsão separados por dois pontos (:).
Um nome de diretório nulo é igual ao diretório atual. Se o DIR começar com uma barra ( /), CDPATHnão será usado.

Se o diretório não for encontrado e a opção shell cdable_varsestiver definida, a palavra será assumida como um nome de variável. Se essa variável tiver um valor, seu valor será usado para DIR .

Opções:

-Lpara forçar os links simbólicos a serem seguidos,
-Puse a estrutura do diretório físico sem seguir os links simbólicos

O padrão é seguir os links simbólicos, como se -Ltivessem sido especificados.

Status de saída:

Retorna 0 se o diretório for alterado; diferente de zero, caso contrário.

VEJA TAMBÉM

bash(1)

IMPLEMENTAÇÃO

Lançamento do GNU bash, versão 4.1.5 (1) (i486-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
Licença GPLv3 +: GNU GPL versão 3 ou posterior

Você pode ver que os argumentos são opcionais. assim

cd &é processado como cde depois enviado para segundo plano. Quando cdé chamado sem argumento, não é necessário processamento. Por isso, passa para segundo plano como "pronto" (processado).

Algumas informações sobre & o Bash &(e comercial) são um operador de controle interno usado para bifurcar processos. Na página de manual do Bash, "Se um comando for finalizado pelo operador de controle &, o shell executará o comando em segundo plano em uma subshell".

Se conectado a um shell interativo, o processo recebe um número de trabalho e o PID filho é exibido. O número do trabalho abaixo é um.

bash$ sleep 30 &
[1] 3586

Observe que quando um processo é bifurcado, o PID filho é armazenado na variável especial $!

bash$ echo $!
3586

Você pode finalizar o trabalho pelo número do trabalho da seguinte forma:

bash$ jobs
[1]+ Running sleep 30 &
bash$ kill %1
[1]+ Terminated sleep 30
bash$
vfbsilva
fonte
5
Perto, mas não exatamente. Primeiro, não é isso que cdé executado e depois enviado para o plano de fundo. O processo em segundo plano é realmente criado antes do programa ser executado no caso de um comando regular; no caso de um interno, esse comportamento é emulado. O comando é executado por esse processo em segundo plano, substituindo-o. Segundo, cdsem argumentos , algo é feito: leva você ao seu HOMEdiretório. Mas, como você o colocou em segundo plano, não há efeito nesse caso.
Warren Young
@WarrenYoung da página de manual diz que cd levará o diretório inicial se nenhum valor for atribuído a ele. Após uma alteração bem-sucedida do diretório, ele não recebe o valor de $ pwd?
precisa saber é o seguinte
1
O diretório de trabalho atual do processo em segundo plano é afetado, não o shell Bash do primeiro plano.
Warren Young.