As variáveis do shell funcionam dentro dos comandos executados do sudo?
Estou tentando executar e depois matar um processo em segundo plano, como outro usuário dentro de um script.
No entanto, não consigo capturar o ID do processo em segundo plano, com "$!", O que significa que não posso mais tarde matar o processo.
Aqui está um exemplo simples que eu coloquei para ilustrar:
#!/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
A execução do processo em segundo plano funciona bem.
Verificando o processo executado (por exemplo, com "ps"), posso confirmar que o processo é realmente de propriedade do usuário dado ao sudo.
No entanto, o $! variável é apenas uma string vazia (tanto quanto eu posso dizer).
Se eu remover o bloco sudo / bash e apenas executar o processo e eliminá-lo, tudo funcionará como esperado com um ID de processo correto armazenado em $ !.
Alguém sabe por que $! não funciona dentro desta execução do comando sudo / bash?
(estou usando as distribuições Linux / Ubuntu, 14.04 e 16.04.)