Não, env
não é garantido como /usr/bin
, como você pode ler no histórico do mecanismo shebang , na seção "O utilitário env":
However, the location of env(1) might vary. Free-, Net-, OpenBSD and some Linux distributions (e.g. Debian) only come with /usr/bin/env. On the other hand, there's only /bin/env at least on SCO OpenServer 5.0.6 and Cray Unicos 9.0.2 (although the latter is only of historical interest). On some other Linux distributions (Redhat) it's located in /bin and /usr/bin/ contains a symbolic link pointing to it.
Ele não move completamente o problema, devido à flexibilidade de env
pesquisar $PATH
. Se acontecer de você obter alguns scripts que usam um local diferente para env
do seu, você somente precisa saber onde seu env
está, e não onde perl
, python
e outros intérpretes podem ser instalados.
E você não precisa codificar /opt/python/3.3.2/bin/python3.3
se esse for o primeiro executável python3.3
em seu PATH. Você pode confiar apenas em env
para encontrá-lo, assim você não precisa atualizar cada script se você atualizar para usar /opt/python/3.3.3/bin/python3.3. Seu cabeçalho de script permanece o mesmo:
#! /usr/bin/env python3.3