Un package que instalo usando npm -g no aparece en un script bash, ¿por qué?

Tengo este script post-receive como un git hook cuando exporto con los siguientes contenidos

 #!/usr/bin/env bash export NODE_ENV=production git --work-tree=/home/myusername/app --git-dir=/home/myusername/git checkout -f cd /home/myusername/app npm prune npm install --production knex migrate:latest 

Cuando ssh'd en mi server instalé knex globalmente pero no parece existir dentro del entorno del shell bash. Me falta el conocimiento de saber cómo son diferentes. También noté que las versiones de mi nodo eran diferentes. ¿Cómo importo el entorno normal de mi usuario?

Para ejecutar los nombres y versiones de los modules que ha instalado, ejecute globalmente:

 npm list --global --depth=0 

A continuación, puede instalar esos modules en el segundo sistema con:

 npm install --global module_name module_name ... 

Si desea instalar una versión específica de Node en el segundo sistema, puede usar nvm o ver esas respuestas para más detalles:

  • ¿Ejecuta npm como superusuario, no es una buena idea?
  • nodo 5.5.0 ya instalado pero el nodo -v obtiene con "v4.2.1" en OS X & homebrew?
  • Nodo instalado pero nodo no se puede encontrar en Ubuntu VPS

Esta es la primera vez que veo un shebang así:

 #!/usr/bin/env bash 

He visto usar /usr/bin/env para encontrar intérpretes de node , python , perl , etc., pero nunca para bash . Usualmente es solo:

 #!/bin/bash 

Recuerde que si desea ejecutar algún progtwig desde un script Bash (sin dar una ruta completa), entonces debe estar en un directory que esté en la variable de entorno PATH.

Para ver tu PATH ejecutar:

 echo $PATH 

O puede usar una ruta completa a un binary en un script:

 #!/bin/sh /full/path/to/something 

y luego no necesita estar en el PATH.