![通过 TCSAFLUSH 在 Stop 中对 stdin 的设置失败!- tcsetattr(5:输入/输出错误)](https://linux22.com/image/1627912/%E9%80%9A%E8%BF%87%20TCSAFLUSH%20%E5%9C%A8%20Stop%20%E4%B8%AD%E5%AF%B9%20stdin%20%E7%9A%84%E8%AE%BE%E7%BD%AE%E5%A4%B1%E8%B4%A5%EF%BC%81-%20tcsetattr%EF%BC%885%EF%BC%9A%E8%BE%93%E5%85%A5%2F%E8%BE%93%E5%87%BA%E9%94%99%E8%AF%AF%EF%BC%89.png)
我通过 ssh 登录到一些 Ubuntu 服务器来运行安装脚本。脚本包含以下几行:
echo "deb http://nginx.org/packages/mainline/ubuntu/ bionic nginx" >> /etc/apt/sources.list
echo "deb-src http://nginx.org/packages/mainline/ubuntu/ bionic nginx" >> /etc/apt/sources.list
...........................................
echo 'mysql-server mysql-server/root_password password xxxxxxx' | debconf-set-selections
apt update
apt install nginx -y
apt install mysql-server -y
............................................
在服务器上第一次运行时,我收到错误“通过 TCSAFLUSH 在 Stop 中对 stdin 的设置失败!- tcsetattr(5:输入/输出错误)“。所有命令仍然执行,但终端输出变得混乱,换行错误,因此很难查看命令输出。如果我再次运行此脚本,上述错误将消失,终端输出将逐行整齐地显示。
虽然我的脚本仍然有效,但我需要一个专业的脚本。我该如何修复这个错误?谢谢!
答案1
我猜是这样的。你在脚本的某个时刻会更改用户吗?如果你这样做了,比如“su root”之类的,当前终端可能不属于该用户。然后操作终端的调用可能会失败。在这种情况下,输出可能会乱序。
不确定如何修复它。通过 su 或 sudo 或其他方式从普通用户转换为 root 用户应该能够处理这个问题。
尝试在脚本开始时运行“reset”。如果我是对的,我不确定这会如何工作,但如果我错了,它可能会起作用 :-)
其他要检查的事项是 TERM 是否正确。SSH 从本地计算机传播到远程计算机的环境变量是什么。
祝你好运!