Devo tentar me livrar de “ioctl inadequado para dispositivo” na saída strace de um script Bash?

5

Estou usando strace com este código:

#!/usr/bin/env bash

exec 0<test.log
while IFS= read -r line; do
    printf "%s\n" "$line"
done

(O redirecionamento <test.log direto dá o mesmo resultado.)

Estou recebendo este erro para cada linha de leitura:

ioctl(0, TCGETS, 0x7fff1e645d50)        = -1 ENOTTY (Inappropriate ioctl for device)

Eu fiz algumas pesquisas e essa é a resposta mais próxima. Está longe de ser pontual embora. Meu script funciona bem, só estou querendo saber se isso é algo com o qual eu deveria lidar ou apenas o modo padrão de Bash. Não é surpreendente que a função ioctl seja chamada para cada linha? Eu pensei que o parâmetro -u para o Bash poderia estar relacionado:

-u fd  Read input from file descriptor fd.

Eu fiz algumas experiências sem sucesso. Então, como essa opção deve ser usada pode ser outra questão.

Estou no Ubuntu 16.04 com o Bash 4.3.48 (1) -release.

    
por Tomasz 30.07.2017 / 16:02

1 resposta

1

Você não pode se livrar dele e não há motivo para removê-lo de qualquer maneira. Isso vem do bash verificar se a entrada está vindo de um terminal (ele chama isatty ). Ele não usa essas informações no seu caso, apenas quando várias opções são passadas. Se você está curioso sobre os detalhes, leia o código-fonte ( read_builtin function em builtins/read.def ).

O fato de que o TCGETS ioctl retorna ENOTTY é como o aplicativo pode dizer que a entrada não é um terminal. É esperado. Só porque uma função retorna um status de erro não significa que algo esteja errado.

    
por 31.07.2017 / 02:03

Tags