Qual é o sentido do comando externo 'cd'?

62

Como mencionado em esta boa resposta , os sistemas POSIX possuem um binário externo cd além do shell construídas em. No OS X 10.8 é /usr/bin/cd . Você não pode usá-lo como o builtin cd , uma vez que sai imediatamente após alterar seu próprio diretório de trabalho. Para que serve isso?

    
por kojiro 05.10.2012 / 22:08

2 respostas

57

Serve principalmente para garantir que a caixa de ferramentas POSIX esteja disponível dentro e fora de um shell (veja o Justificativa POSIX para requerer aqueles ).

Para cd , isso não é muito útil, mas observe que cd altera diretórios, mas tem outros efeitos colaterais: ele retorna um status de saída que ajuda a determinar se você pode chdir() para esse diretório ou não, e gera uma mensagem de erro útil explicando porque você não pode chdir() quando não pode.

Exemplo:

dirs_i_am_able_to_cd_into=$(find . -type d -exec cd {} \; -print)

Outro efeito colateral potencial é a montagem automática de um diretório.

Em alguns sistemas, a maioria dos comandos externos para o shell padrão é implementada como um link simbólico para o mesmo script que:

#! /bin/sh -
"${0##*/}" "$@"

Isso é iniciar um shell e executar o embutido nele.

Alguns outros sistemas (como o GNU), possuem utilitários como verdadeiros comandos executáveis que podem levar a confusões quando o comportamento difere da versão embutida no shell.

    
por 05.10.2012 / 22:22
11

O fato de um comando cd não interno estar disponível é essencialmente devido ao requisito para todos os builtins regulares serem chamados pelos comandos da família exec env , find , nice , nohup , time e xargs combinados ao fato de que alguns desses comandos não estão sendo implementados como builtins.

Isso não faz muito sentido para cd , já que combiná-lo com esses comandos não faz sentido. Aqui estão alguns exemplos mais ou menos confiáveis:

find . -type d -exec cd {} \;
env HOME=/foo cd
    
por 06.10.2012 / 00:39