Estou usando o Debian Jessie e criei um serviço systemd para iniciar um script em um tty como este:
[Unit]
Description=My Test Script
[Service]
Type=simple
ExecStart=/bin/bash /home/tester/test.sh
StandardInput=tty-force
StandardOutput=tty
StandardError=tty
TTYPath=/dev/tty2
TTYReset=no
TTYVHangup=no
TTYVTDisallocate=no
Restart=always
RestartSec=3
[Install]
WantedBy=default.target
Meu script test.sh
é apenas uma linha de leitura:
#!/bin/bash
read -p "Backspace test: "
exit 0
O que acontece? Eu posso encontrar o script rodando em tty2 - exatamente como esperado; no entanto, se eu inserir algo e usar backspace para remover caracteres, ele começará a exibir as coisas para trás com barras circulares.
Exemplo de introdução de caracteres:
Backspace test: abc
Em retrocesso três vezes, o que deve remover abc
, ele se torna:
Backspace test: abc\cba/
Além disso, stty -a
dá erase = ^?
e se eu fizer login em um tty e iniciar test.sh
, tudo funcionará como esperado.
Por que isso acontece?
Editar: Resolvido ajustando as configurações da linha de terminal usando stty
; mais especificamente, a opção echoprt
é interessante:
* [-]echoprt
echo erased characters backward, between '\' and '/'