Último ID do processo de segundo plano ($!) não está funcionando no comando sudo bash

0

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.)

    
por jehad 26.06.2016 / 20:48

1 resposta

1

Aqui, documentos com um delimitador sem aspas passam por expansão variável. Portanto, $! é interpretado no contexto do script externo, não no shell que executa os comandos do documento here.

Cite o << 'EOBLOCK' ou inverta os cifrões no documento aqui: kill \$! .

    
por 26.06.2016 / 21:05

Tags