conformidade POSIX do programa de cd?

3

A globbing e a expansão de shell são a mesma coisa? Estou aprendendo C escrevendo um shell personalizado e também estou aprendendo POSIX. Agora eu me pergunto se é a conformidade com POSIX que cd - o leva de volta e que ~ significa diretório inicial? Porque nem todas as shells podem fazer isso, e eu não sei se é necessário para uma conformidade POSIX mínima do comando cd. A implementação que eu uso é

int do_cd(int argc, const char **argv) {
    const char *path;
    if (argc > 1) {
        path = argv[1];
    }
    else {
        path = getenv("HOME");
        if (path == NULL) {
            fprintf(stderr, "No HOME environment variable\n");
            return 1;
        }
    }
    if (chdir(path) < 0) {
        perror(path);
        return 1;
    }
    return 0;
}
    
por Niklas Rosencrantz 23.04.2016 / 09:21

3 respostas

7

Expansão do til faz parte do processamento de comandos do shell, não faz parte do cd . cd vê o caminho já expandido como argumento.

exige que cd - seja equivalente a cd "$OLDPWD" && pwd . OLDPWD deve ser definido por cd se PWD existir no momento de executar o comando.

    
por 23.04.2016 / 09:31
2

A expansão de til parece ser padronizada (cf. IEEE Std 1003.1, 2004 ) , mas faz parte da expansão do shell, não de cd .

cd - também deve ser suportado (cf. IEEE Std 1003.1,2005 ).

    
por 23.04.2016 / 09:30
2

Sim, cd - é obrigatório no POSIX: e por isso é expansão da tilda (basta um pouco de pesquisa na Web ;-))

Seu cd embutido (tecnicamente não um "programa") precisará fazer alguma análise de opção também se quiser ser compatível com POSIX.

Quanto ao globbing vs shell expansão, a maneira que eu entendo, globbing é um caso particular de expansão de shell que envolve um tipo específico de correspondência de padrões.

    
por 23.04.2016 / 09:33