Se o seu script se destina ao uso por desenvolvedores do Node, você deve simplesmente usar
#!/usr/bin/env node
e não se preocupe em tentar a compatibilidade com pessoas que têm apenas o Node instalado como nodejs.
Justificativa:
- É o que as crianças legais estão fazendo, e se você não fizer isso também, você não será legal. Projetos de node principais como jshint , karma , bower e até mesmo npm simplesmente são usados
#!/usr/bin/env nodecomo o shebang para seus scripts executáveis.
- Porque as crianças legais estão fazendo isso, qualquer pessoa que trabalhe com o Node no Ubuntu configurou um
/usr/bin/nodecomo um link simbólico para nodejs. Existem instruções muito vistas sobre como fazer isso aqui no Stack Overflow e em toda a web. Existia até o nodejs-legacypacote cujo propósito era criar este link simbólico para você. As pessoas que usam o Node sabem como consertar esse problema no Ubuntu e precisam fazê-lo se quiserem usar praticamente qualquer software já escrito em Node.
- O problema nem parece mais existir no Ubuntu 14.04; Limpei o Node e executei um
apt-get install nodejse ele foi criado /usr/bin/nodecomo um link simbólico para /etc/alternatives/node. As pessoas afetadas por esse problema são, eu suspeito, uma minoria cada vez menor.
Mesmo que você tenha como alvo pessoas analfabetas do Node, você ainda pode querer usar #!/usr/bin/env node, talvez adicionando a possível necessidade de criação de link simbólico manual ou instalação do nodejs-legacypacote à sua documentação de instalação se você julgar necessário. Observe que se alguém com, nodejsmas não nodedisponível, tentar executar seu programa com o esquema acima, verá:
/ usr / bin / env: node: Não existe esse arquivo ou diretório
e Googling que lhes dará a correção no primeiro resultado e muitas vezes na primeira página.
Se você realmente deseja desesperadamente ter certeza de que o usuário pode executar seu software em um sistema onde nodejsestá disponível, mas nodenão está (ou onde nodeestá realmente o programa Amateur Packet Radio Node ), então você pode usar este "shebang de duas linhas" do Unix e Linux Stack Exchange :
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
mas você realmente precisa fazer isso quando quase ninguém mais no mundo Node precisa?