Para portabilidade, você pode seguramente assumir que #!/bin/sh
encontrará um shell em sua maioria compatível com POSIX em qualquer sistema Unix ou Linux padrão, mas é realmente sobre isso.
No FreeBSD, OpenBSD e NetBSD (junto com o FreeBSD, PC-BSD e alguns outros derivados), o bash está localizado em /usr/local/bin/bash
(se estiver instalado), então a abordagem /usr/bin/env
fornece portabilidade entre o Linux e o BSD.
O Android não é um sistema Unix ou Linux padrão. No meu telefone Android não enraizado, nenhum dos /usr/bin/env
, /bin/bash
ou mesmo /bin/sh
existe e o shell do sistema é /system/bin/sh
.
Um script de shell que está faltando o #!
(shebang) tentará executar no shell que o chamou em alguns sistemas ou pode usar um interpretador padrão diferente ( /bin/bash
, por exemplo), em outros sistemas. E enquanto isso pode funcionar no Android, não é garantido que funcione em outros sistemas operacionais, onde os usuários podem optar por usar um shell interativo que não seja bash
. (Eu uso o tcsh no FreeBSD, onde é o shell padrão, e o script shebang-less é interpretado pelo shell de chamada).
Então de onde estou, parece que não é possível criar um script de shell que seja portátil entre sistemas Android e não-Android (Linux ou Unix), porque o Android faz as coisas de maneira diferente.