Почему sudo bash отличается от обычного bash

Описание проблемы : я использую в своей разработке нечто, называемое play framework , что требует от меня сделать доступным в пути скрипт python play . Поэтому я создаю символическую ссылку в / usr / local / bin ... Теперь я написал сценарий оболочки (назовите его status.sh ), который вызывает этот сценарий python следующим образом: play status <some values here related to my app> &> /tmp/xyz.txt и этот сценарий оболочки затем отправляет мне файл по электронной почте. Это прекрасно работает, когда я выполняю скрипт следующим образом ./script.sh. Однако, когда скрипт выполняется как выражение cron каждый день, я получаю вывод от stderr, говорящий «play: команда не найдена».

Поэтому я немного покопался и вот мои выводы:

  1. echo $PATH, когда я нахожусь на раковине, показывает, что у меня есть / usr / local / bin доступен для меня, поэтому я могу успешно выполнить команду play status
  2. , однако, когда я набираю sudo bash, а затем echo $PATH, у меня нет пути / usr / local / bin больше. Это ограниченный набор папок (одна из них - / usr / bin ).

Q : Почему это поведение ?! Я не понимаю, почему путь отличается. Также в качестве обходного пути вы можете предложить:

  • новую символическую ссылку из / usr / bin в / usr / local / bin (каковы побочные эффекты этого?)
  • удалить / usr / local / bin sym link в целом и использовать только / usr / bin
  • Соглашение о том, что я здесь не следую за связыванием новых программ и их выполнением из $PATH?

Спасибо.

1
задан 24 November 2012 в 08:15

2 ответа

У всех пользователей, включая root, есть набор переменных среды, которые применяются при каждом открытии новой оболочки.

Для обычного пользователя вы можете добавить к существующему пути, отредактировав ~ / .bashrc и поместив следующую строку в самом конце:

PATH=$PATH:/mypath_to_my_files

Для root я считаю, что вам придется редактировать / root / .bashrc вместо. Однако в этом случае, вероятно, имеет смысл убедиться, что все пользователи имеют это в своем пути, и для этого вы можете использовать строку редактирования выше и просто поместить ее в конец файла / etc / bash. Bashrc

0
ответ дан 24 November 2012 в 08:15

Я бы порекомендовал вам просто переместить символическую ссылку в /usr/bin.

.
0
ответ дан 24 November 2012 в 08:15

Другие вопросы по тегам:

Похожие вопросы: