我正在使用 Debian Jessie 并创建了一个 systemd 服务,用于在 tty 上启动脚本,如下所示:
[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
我的脚本test.sh
只是一个阅读行:
#!/bin/bash
read -p "Backspace test: "
exit 0
会发生什么?我可以找到在 tty2 上运行的脚本——正如预期的那样;但是,如果我输入某些内容然后使用退格键删除字符,它就会开始用括起来的斜杠向后输出内容。
输入字符示例:
Backspace test: abc
按退格键三次,这应该删除abc
,而是变成:
Backspace test: abc\cba/
此外,stty -a
如果erase = ^?
我登录 tty 并启动test.sh
,一切都会按预期工作。
为什么会发生这种情况?
编辑:通过使用调整终端线路设置来解决stty
;更具体地说,这个选项echoprt
很有趣:
* [-]echoprt
echo erased characters backward, between '\' and '/'