Não é necessariamente melhor.
A vantagem #!/usr/bin/env pythoné que ele usará o pythonexecutável que aparecer primeiro no usuário $PATH.
A desvantagem de #!/usr/bin/env pythoné que ele vai usar qualquer pythonexecutável aparece em primeiro lugar o usuário do $PATH.
Isso significa que o script pode se comportar de maneira diferente, dependendo de quem o executa. Para um usuário, ele pode usar o /usr/bin/pythonque foi instalado com o sistema operacional. Por outro lado, pode usar um experimental /home/phred/bin/pythonque não funciona corretamente.
E se pythoné instalado apenas em /usr/local/bin, um usuário que não tem /usr/local/binem $PATHnão vai mesmo ser capaz de executar o script. (Isso provavelmente não é muito provável nos sistemas modernos, mas pode acontecer facilmente para um intérprete mais obscuro.)
Ao especificar, #!/usr/bin/pythonvocê especifica exatamente qual intérprete será usado para executar o script em um sistema específico .
Outro problema em potencial é que o #!/usr/bin/envtruque não permite que você passe argumentos para o intérprete (exceto o nome do script, que é passado implicitamente). Isso geralmente não é um problema, mas pode ser. Muitos scripts Perl são escritos com #!/usr/bin/perl -w, mas use warnings;é a substituição recomendada atualmente. Os scripts #!/bin/csh -fcsh devem usar - mas os scripts csh não são recomendados em primeiro lugar. Mas poderia haver outros exemplos.
Eu tenho vários scripts Perl em um sistema de controle de origem pessoal que instalo quando configuro uma conta em um novo sistema. Eu uso um script de instalação que modifica a #!linha de cada script à medida que o instala no meu $HOME/bin. (Eu não precisei usar nada além de #!/usr/bin/perlultimamente; ele remonta aos tempos em que o Perl geralmente não era instalado por padrão.)
Um ponto secundário: o #!/usr/bin/envtruque é indiscutivelmente um abuso do envcomando, que foi originalmente planejado (como o nome indica) para invocar um comando com um ambiente alterado. Além disso, alguns sistemas mais antigos (incluindo SunOS 4, se bem me lembro) não tinha o envcomando /usr/bin. É provável que nenhum destes seja uma preocupação significativa. envfunciona dessa maneira, muitos scripts usam esse #!/usr/bin/envtruque, e os provedores de SO provavelmente não farão nada para quebrá-lo. Ele pode ser um problema se você quiser que seu script para ser executado em um sistema muito antigo, mas, em seguida, é provável que você precisa modificá-lo de qualquer maneira.
Outra questão possível (graças a Sopalajo de Arrierez por apontar nos comentários) é que os trabalhos cron são executados em um ambiente restrito. Em particular, $PATHnormalmente é algo parecido /usr/bin:/bin. Portanto, se o diretório que contém o intérprete não estiver em um desses diretórios, mesmo que esteja no seu padrão $PATHem um shell de usuário, o /usr/bin/envtruque não funcionará. Você pode especificar o caminho exato ou adicionar uma linha ao seu crontab para definir $PATH( man 5 crontabpara detalhes).