команда не найдена с использованием sudo в скрипте

Я пытаюсь выполнить команду sudo внутри сценария bash.

#!/bin/bash sudo node app.js 

и это меня бросает:

 sudo: node: command not found 

Если я пытаюсь выполнить только узел app.js (без sudo), он работает нормально.

Если я попытаюсь запустить sudo -h , он распечатает sudo help.

Но, когда я пытаюсь использовать sudo node app.js он бросает мне ошибку.

Похоже, что node находится на нестандартном пути или, по крайней мере, не на корневом пути. Есть несколько способов обойти это.

  1. Использовать полный путь к node

    • Найдите полный путь, используя which node

    • Если вы говорите, что это в /home/user/bin/node тогда вызовите sudo /home/user/bin/node app.js

    • Или, как @UlrichSchwarz, вы можете объединить эти два с подстановкой команд: sudo $(which node) app.js

    • Помните, что пользователь, sudo вы sudo в разрешениях на чтение и выполнение в местоположении, а не столько в проблеме, когда вы sudo root


  1. Вызовите sudo с параметром -E чтобы сохранить переменные среды

    • sudo -E node app.js

    • Это будет держать ваш $PATH до sudo

    • Вы можете увидеть sudo страницу sudo для получения дополнительной информации: http://linux.die.net/man/8/sudo