Jeśli twój skrypt jest przeznaczony do użytku przez programistów Node, powinieneś po prostu użyć
#!/usr/bin/env node
i nie przejmuj się próbami zgodności z ludźmi, którzy mają zainstalowany tylko Node jako nodejs.
Racjonalne uzasadnienie:
- To właśnie robią fajne dzieciaki, a jeśli ty też tego nie robisz, nie jesteś fajny. Główne projekty węzłów, takie jak jshint , karma , bower , a nawet npm, po prostu używają
#!/usr/bin/env nodejako shebang dla swoich wykonywalnych skryptów.
- Ponieważ robią to fajne dzieciaki, każdy, kto pracuje z Node w systemie Ubuntu, skonfigurował
/usr/bin/nodejako łącze symboliczne do nodejs. Są wysoko obiekty instrukcje robić to tutaj na przepełnienie stosu i całej sieci. Był nawet nodejs-legacypakiet, którego celem było stworzenie dla Ciebie tego dowiązania symbolicznego. Ludzie, którzy używają Node, wiedzą, jak rozwiązać ten problem w Ubuntu i muszą to zrobić, jeśli chcą używać prawie każdego oprogramowania kiedykolwiek napisanego w Node.
- Wydaje się, że problem już nie istnieje w systemie Ubuntu 14.04; Właśnie wyczyściłem Node, uruchomiłem
apt-get install nodejsi utworzyłem /usr/bin/nodejako dowiązanie symboliczne do /etc/alternatives/node. Podejrzewam, że ludzie dotknięci tą kwestią stanowią malejącą mniejszość.
Nawet jeśli celujesz w analfabetów Node, możesz nadal chcieć używać #!/usr/bin/env node, być może dodając ewentualną potrzebę ręcznego tworzenia dowiązań symbolicznych lub instalacji nodejs-legacypakietu do dokumentacji instalacji, jeśli uznasz to za konieczne. Zwróć uwagę, że jeśli ktoś, kto nodejsjest nodeniedostępny, ale nie jest dostępny, spróbuje uruchomić program za pomocą powyższego shebang, zobaczy:
/ usr / bin / env: node: Nie ma takiego pliku lub katalogu
i googlowanie, które da im poprawkę w pierwszym wyniku i wiele razy na pierwszej stronie.
Jeśli naprawdę, desperacko chcesz się upewnić, że użytkownik może uruchomić twoje oprogramowanie w systemie, w którym nodejsjest ono dostępne, ale nodenie jest (lub gdzie nodejest w rzeczywistości program Amateur Packet Radio Node ), możesz użyć tego "dwuwierszowego shebang" wziętego z Unix i Linux Stack Exchange :
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
ale czy naprawdę musisz to robić, gdy prawie nikt inny w świecie węzłów nie jest?