Если ваш скрипт предназначен для разработчиков Node, вы должны просто использовать
#!/usr/bin/env node
и не пытайтесь обеспечить совместимость с людьми, у которых Node установлен только как nodejs.
Обоснование:
- Это то, что делают крутые ребята, и если вы тоже этого не делаете, вы не крутые. Основные узловые проекты , такие как jshint , карма , дача , и даже НПЙ просто использовать
#!/usr/bin/env nodeкак притон для своих исполняемых скриптов.
- Поскольку крутые ребята это делают, любой, кто работает с Node в Ubuntu, создал
/usr/bin/nodeсимволическую ссылку на nodejs. Здесь, в Stack Overflow, и во всем Интернете есть хорошо изученные инструкции по выполнению этого. Был даже nodejs-legacyпакет, вся цель которого заключалась в создании для вас этой символической ссылки. Люди, которые используют Node, знают, как решить эту проблему в Ubuntu, и они должны это сделать, если они хотят использовать практически любое программное обеспечение, когда-либо написанное на Node.
- Проблема, похоже, больше не существует в Ubuntu 14.04; Я просто очистил Node и запустил,
apt-get install nodejsи он был создан /usr/bin/nodeкак символическая ссылка на /etc/alternatives/node. Я подозреваю, что людей, страдающих от этой проблемы, становится все меньше и меньше.
Даже если вы нацелены на неграмотных пользователей Node, вы все равно можете захотеть использовать #!/usr/bin/env node, возможно, добавив возможную необходимость создания символических ссылок вручную или установки nodejs-legacyпакета в вашу документацию по установке, если вы сочтете это необходимым. Обратите внимание, что если кто-то, у кого есть доступ, nodejsно nodeнедоступен, попытается запустить вашу программу с указанным выше шебангом, он увидит:
/ usr / bin / env: node: нет такого файла или каталога
и поиск в Google, который даст им исправление в первом результате и много раз на первой странице.
Если вы действительно, отчаянно хотите убедиться, что пользователь может запускать ваше программное обеспечение в системе, где nodejsоно доступно, но nodeне доступно (или где nodeна самом деле находится программа узла любительского пакетного радио ), то вы можете использовать этот "двухстрочный шебанг", взятый из Unix и Linux Stack Exchange :
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
но действительно ли вам нужно это делать, когда почти никого в мире узлов нет?