Странный вывод при повторении переменной от другого пользователя

[

] Я использовал ваш конфигурационный файл и добавил нижеприведенное содержимое в конец файла []httpd.conf[]. []addType[], []AddHandler[], []PHPIniDir[]. [

] [

]И он работает на CentOS 5, не показывая содержимое []index.php[].[

].
1
07.05.2015, 03:00
1 ответ

Поскольку вы используете «su -», выполняемая оболочка притворяется оболочкой входа в систему (выполняя системный / etc / profile , профиль пользователя, такой как .profile или .bash_profile и т. Д.). Один из этих сценариев генерирует escape-последовательность (строка Esc] P ) и выводит результат на стандартный вывод. Так не должно быть.

Он должен проверять, является ли оболочка интерактивной, и , затем - и только потом! - он должен генерировать escape-последовательность.

Лучший способ проверить интерактивную оболочку - это проверить значение «$ -» и посмотреть, содержит ли она букву i - если есть, оболочка интерактивна, а если нет, оболочка - нет. Обычно я использую что-то вроде этого:

case "$-" in
*i*)  # Here if the shell is interactive
      ;;
*)    # Here otherwise
      ;;
esac

Вам нужно определить, что генерирует эту escape-последовательность. Распространенными виновниками являются echo , tput и другие команды, которые должны изменять настройки терминала. Я немного погуглил, но не могу найти эту конкретную escape-последовательность, поэтому не могу дать никаких подсказок относительно того, где и что искать.

Конечно, почему вы вообще используете su - ? Просто используйте sudo -u user1 и исключите лишний шаг (ваши требования могут включать выполнение .profile user1 ; я не знаю, и вы не сказали).

2
27.01.2020, 23:37

Теги

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