LINUX.ORG.RU

Разное поведение PS4 для разных пользователей

 ,


0

1

Привер лорогугл.
Никак не могу понять, чем обуславливается разное поведение PS4 для разных пользователей, посоветуйте мне ваши советы
Окружение: CentOS 7, bash 4.2.46(2)

Для отладки сложных скриптов использую вот такой сниппет:

export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'

Тестовый скрипт:
#!/bin/bash
set -x
m=4123
echo start
echo $m
my() {
    echo $1
}

my 123


Результат под непривилегированным пользователем(правильный):
+(./test.sh:3): m=4123
+(./test.sh:4): echo start
start
+(./test.sh:5): echo 4123
4123
+(./test.sh:10): my 123
+(./test.sh:7): my(): echo 123
123

Результат под рутом(неправильный):
+ m=4123
+ echo start
start
+ echo 4123
4123
+ my 123
+ echo 123
123


Проверил переменные окружения и профайлы - никаких зацепок и идей не появилось.

★★★★★

А я теги не читал, подумал что проблемы с игровой консолью

anonymous
()

Впечатление, что рутовый bash при старте устанавливает значение для переменной по умолчанию.

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

думал про такое, но ведь я переопределяю её непосредственно перед вызовом скрипта

$ export PS4...
$ ./test.sh

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

А я напечатал её из скрипта и там "+ ". У меня оно аналогично работает:

GNU bash, version 4.3.48(1)-release (x86_64-slackware-linux-gnu)
xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 4)
Ответ на: комментарий от zolden

Так и есть (variables.c:initialize_shell_variables()):

  if (current_user.euid == 0)
    bind_variable ("PS4", "+ ", 0);
  else
    set_if_not ("PS4", "+ ");

bash 4.4 ChangeLog:

g.  Shells running as root no longer inherit PS4 from the environment, closing
    a security hole involving PS4 expansion performing command substitution.
xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.