O 'mv' alguma vez terá a capacidade de criar diretórios?

3

Esta pergunta pede a melhor maneira de criar um diretório ao usar mv , se ele não existir. Minha pergunta é por que isso não é um recurso inerente de mv ? Existe algum motivo fundamental pelo qual isso não seria uma boa ideia?

    
por texasflood 10.03.2015 / 13:30

1 resposta

4

Lembre-se de que há mais de uma implementação de mv . O mv que você usa no Linux não é exatamente da mesma fonte que o do OSX ou do Solaris, etc. Mas é desejável que todos eles se comportem da mesma forma - essa é a ponto de padrões . É concebível que uma implementação de mv possa adicionar uma opção para este propósito, embora seja tão simples de lidar, provavelmente não valeria a pena porque o benefício muito menor é influenciado por uma conseqüência negativa mais significativa: Código escrito que explorou tal opção não padrão de uma implementação não seria portável / comportar-se constantemente em outro sistema usando uma implementação padrão.

mv é padronizado pelo POSIX e isso vincula explicitamente seu comportamento ao rename() chamada do sistema . Na ISO C, o comportamento de rename() não é muito específico e muito é deixado para a implementação, mas sob POSIX você notará o potencial ENOENT erro, indicando "um componente do prefixo de caminho de novo não existe ", descrevendo o comportamento esperado em termos explícitos. Isso é melhor do que a ambigüidade e deixar tais detalhes à altura da implementação, porque fazer isso prejudica a portabilidade.

Em defesa do design, em um contexto de script, provavelmente é melhor falhar por padrão em um caminho de destino inválido do que assumir que precisa ser criado. Isso ocorre porque o caminho em si pode frequentemente vir da entrada ou configuração do usuário e pode incluir um erro de digitação; Nesse caso, o script deve falhar nesse ponto e indicar ao usuário que ele digitou um caminho inválido. É claro que há a opção para a pessoa que escreveu o código implementar comportamentos diferentes e criar diretórios que não existem, mas é melhor que você seja responsável por fazer isso do que pelo contrário (sendo responsável por garantir uma chamada mv ). não criará diretórios anteriormente inexistentes).

    
por 10.03.2015 / 14:17