Работают ли переменные оболочки внутри исполняемых команд sudo?
Я пытаюсь запустить, а затем убить фоновый процесс, как другой пользователь внутри скрипта. Тем не менее, я не могу захватить идентификатор фонового процесса с "$!", что означает, что я не могу потом убить процесс.
Вот простой пример, который я собрал для иллюстрации:
#!/bin/bash
userOfThisScript=`id -u -n $SUDO_USER`
sudo -u $userOfThisScript /bin/bash << EOBLOCK
vi &
echo "BG Task ID inside block: <$!>" # <-- $! is empty string
kill $!
EOBLOCK
Запуск фонового процесса работает нормально. Проверяя выполненный процесс (например, с помощью "ps"), я могу подтвердить, что этот процесс действительно принадлежит пользователю, отданному sudo. Тем не менее, $! переменная это просто пустая строка (насколько я могу судить).
Если я удаляю блок sudo/bash и просто выполняю процесс и уничтожаю его, то все работает, как и ожидалось, с правильным идентификатором процесса, хранящимся в $ !.
Кто-нибудь есть идеи, почему $! не работает внутри этой команды sudo/bash?
(Я использую дистрибутивы Linux/Ubuntu, 14.04 и 16.04.)