Назад | Перейти на главную страницу

Bash: команда pip не найдена при вызове из сценария, запущенного с помощью sudo

У меня странная проблема. В php команда не найдена в одной конкретной ситуации.
Я пытаюсь вызвать команду тремя разными способами. Только один из них не работает:

  1. Быть пользователем john Я создаю простой скрипт, который вызывает php --version. Тогда как пользователь root Я называю этот сценарий так: sudo -u john ./script.sh
    Таким образом php команда не найдена.

  2. Быть root Я вызываю команду прямо так: sudo -u john php --version
    Здесь нет проблем, команда действительно существует.

  3. Я вызываю сценарий напрямую как пользователь john: ./script.sh
    Он тоже отлично работает.

Чем это вызвано?

Проблема возникает и с другими пользователями, а не только с john, и это происходит только на этой конкретной машине.
ОС - CentOS 5.9.

РЕДАКТИРОВАТЬ: Также другие команды, такие как gcc, perl или python не представляют этой проблемы. В php Команда - единственная, которую я нашел до сих пор с проблемой.

  1. В вашем тестовом сценарии отсутствует линия шебанг. Нет тебе супа.
  2. Подоболочка, вызываемая вашим скриптом, не использует тот же PATH переменная в качестве интерактивной оболочки. Тип echo $PATH чтобы увидеть текущую переменную пути, и установите это PATH переменная внутри скрипта.

Что касается того, почему PATH переменная не согласуется между двумя:

  • Поскольку вы не указываете строку shebang, у вас нет гарантии, что вызываемая оболочка такая же, как ваша интерактивная оболочка. Это может быть источник разных файлов конфигурации.
  • В зависимости от того, как запускается оболочка, берутся разные файлы конфигурации. Вы находитесь внутри интерактивной оболочки, а ваш сценарий - неинтерактивная оболочка. Предполагая, что вы пытаетесь использовать bash, проконсультируйтесь man bash и начните читать в INVOCATION раздел в верхней части файла.