Como posso suprimir os avisos do GNU dc?

0

Quando alguns comandos inválidos ou indefinidos são executados em dc, normalmente apenas imprime um aviso. Exemplo:

cp
dc: stack empty

Isso é legal na maioria das vezes, no entanto, há casos em que isso é chato, já que a ação desejada realmente funciona. Considere este exemplo:

5 6+sИlИp
dc: 0230 unimplemented
dc: 0230 unimplemented
11

Veja? Mesmo se eu tentar usar outro registrador do que aqueles no manual, ele ainda funciona. ("oficialmente" 256, mas como você deveria usar o byte NUL?)

Mesmo que talvez nem sempre seja uma boa ideia, gostaria que dc me mostrasse esses avisos em alguns scripts.

Como posso fazer avisos dc não imprimir?

    
por Hohmannfan 15.04.2017 / 18:57

1 resposta

2

Os erros são por causa dos caracteres multibyte, o Gnu (e eu acho que todos os Unixes modernos) usam utf-8.

Portanto

dc <<< "5 6+s¢l¥p" é equivalente a dc <<< "5 6+s¢l¢p" . O primeiro byte de ¢ e ¥ é o mesmo e é usado como o endereço do registrador. O segundo byte produz o erro.

veja a saída de od

#↳ od -ta -to1 <<< "5 6+s¢l¥p"
0000000   5  sp   6   +   s   B   "   l   B   %   p  nl
        065 040 066 053 163 302 242 154 302 245 160 012

Portanto, o erro é válido e não deve ser ignorado.

Tente este caso de teste, dc <<< "4s¢11s¥l¢p" de qual saída você está esperando? ( dc avisa que há um problema.) Qual saída ela produz?

dc não é utf-8 ciente, funciona em bytes. O Utf-8 é quase, mas não totalmente compatível com codificações de 8 bits (como o ascii).

veja: link (computerphile no utf-8).

    
por 15.04.2017 / 19:47

Tags