1
resposta

Redirecionamento ambíguo

Caros,

Meu código está praticamente o mesmo do exibido no vídeo e no material da atividade, porém ao executá-lo recebo as seguintes mensagens:

processos-memoria-alocada.sh: linha 13: log/$nome_processo.log: redirecionamento ambíguo

processos-memoria-alocada.sh: linha 15: log/$nome_processo.log: redirecionamento ambíguo

Os arquivos foram salvos com sucesso

As linhas em questão são:

echo -n $(date +%F,%H:%M:%S,) >> log/$nome_processo.log

echo "$(bc <<< "scale=2;$tamanho_processo/1024") MB" >> log/$nome_processo.log

O que pode estar ocorrendo?
1 resposta

Olá,

Passei por isso também e descobri que o comando ps está retornando o nome de alguns processos com espaços. Quando utiliza-se esse nome com espaços, o interpretador não sabe para onde redirecionar o resultado do comando echo.

Para resolver isso, eu passei o resultado do comando ps que retorna o nome do processo para o comando sed antes de colocar esse resultado em uma variável. Segue o código:

nome_processo=$(ps -p $pid -o comm= | sed s/' '/'_'/g)

O que o comando sed está fazendo é substituindo todos os espaços do texto de entrada por underlines, como descrito no manual do comando:

s/regexp/replacement/
              Attempt to match regexp against the pattern space.  If successful, replace that portion matched  with  replacement.   The  re‐
              placement may contain the special character & to refer to that portion of the pattern space which matched, and the special es‐
              capes \1 through \9 to refer to the corresponding matching sub-expressions in the regexp.

A letra g no final garante que a substituição ocorra para todas as ocorrências de regex no texto.