O que o comando CD faz?

7

Não percebendo que eu tinha caps-lock, digitei CD no prompt de comando do meu mac. Surpreendentemente, não houve erro.

which CD me mostra /usr/bin/CD . E se eu examinar esse arquivo, será assim:

#!/bin/sh
# $FreeBSD: src/usr.bin/alias/generic.sh,v 1.2 2005/10/24 22:32:19 cperciva Exp $
# This file is in the public domain.
builtin 'echo ${0##*/} | tr \[:upper:] \[:lower:]' ${1+"$@"}

Eu acho que é algo a ver com a tradução de letras maiúsculas para minúsculas, mas ${0##*/} é completamente opaco para mim. man CD me diz "sem entrada manual". Alguém pode explicar esse comando?

EDIT: Ok, eu notei que o sistema de arquivos do OSX não diferencia maiúsculas de minúsculas, então este arquivo é na verdade /usr/bin/cd . Mas se eu digitar cd normalmente, é claro que obtenho o builtin, então /usr/bin/cd só é chamado quando eu entendi errado. Eu ainda gostaria de saber o que isso faz.

    
por John Fouhy 13.11.2009 / 04:19

2 respostas

9

Parece que não faz muita coisa:

Link da lista de correspondência da Apple

"Eu estou indo em algumas memórias antigas aqui, então eu não posso fornecer um muito explicação detalhada, mas a razão / usr / bin / cd existe é devido a um requisito POSIX que diz respeito a aliases e ser capaz de não use um alias via escape. Mas / usr / bin / cd é um inútil roteiro desde se você executar o cd dentro de um script de shell do diretório A alteração só se aplica ao subshell sob o qual o script é executado. cd não pode ser um script de shell.

Além disso, o script é um script genérico em que é usado para um número de comandos e não apenas cd.

Eu notei que / usr / bin / cd tem uma contagem de 15 links no meu link 10.4 sistema [...] "

Mais abaixo nesse tópico:

"Um amigo meu me disse que o" $ {0 ## * /} "significa" pegue o comando, mas remova o caminho "(isto é, converta" / usr / bin / cd "para" cd "). "

Portanto, parece que o script remove o caminho, converte o resultado em minúscula e, em seguida, acrescenta os argumentos originais.

    
por 13.11.2009 / 05:24
-1

Ele está tentando fazer a coisa certa e traduzir seu comando "cd" para minúsculas. Lamentavelmente, isso é muito sem sentido, pois é executado em uma subcamada. O restante tem a ver com a compreensão do bash.

    
por 13.11.2009 / 04:28