![如何解决 Vagrant 中的“ttyname 失败:设备的 ioctl 不适当”?](https://linux22.com/image/1516679/%E5%A6%82%E4%BD%95%E8%A7%A3%E5%86%B3%20Vagrant%20%E4%B8%AD%E7%9A%84%E2%80%9Cttyname%20%E5%A4%B1%E8%B4%A5%EF%BC%9A%E8%AE%BE%E5%A4%87%E7%9A%84%20ioctl%20%E4%B8%8D%E9%80%82%E5%BD%93%E2%80%9D%EF%BC%9F.png)
使用此代码片段(内联 shell 配置程序)时:
config.vm.provision "shell" do |s|
s.inline = <<-SHELL
<shell code>
SHELL
end
其结果是:
==> default: mesg:
==> default: ttyname failed
==> default: :
==> default: Inappropriate ioctl for device
看起来其他人已经发现了这个问题也有。有人知道如何解决吗?
答案1
我注意到,即使这条消息显示为错误(红色),脚本也已成功执行!几天后,我看到了一个可能的修复方法,我发表了一个答案。“修复”是:
# Prevent TTY Errors (copied from laravel/homestead: "homestead.rb" file)... By default this is "bash -l".
config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
也许您只是不需要它,但如果它对您有用,您可以尝试并使用它。
正如您在上面的注释行中看到的 - “mesg: ttyname failed Inappropriate ioctl for device”已被 laravel 团队阻止。谢谢!
大多数开发人员都希望在开发时避免错误/警告,因此这似乎是我们需要的修复(可能的修复)。
重要提示:我还没有对这个解决方案进行过多测试,但盒子启动时没有出现“mesg: ttyname failed Inappropriate ioctl for device”错误!您可以随意尝试,如果遇到任何问题,只需发表评论即可节省其他人的时间!
答案2
1)打开/root/.profile
2)移除进攻线
3)替换为:
tty -s && 消息
祝您使用 Linux 快乐,新年快乐。
乔治·哈特,路易斯安那州立大学
答案3
这似乎是由默认流浪者配置的(它模拟登录 shell,从而处理登录相关的配置文件config.ssh.shell
,bash -l
如.profile
)/root/.profile
在至少一些 Linux 发行版(包括例如ubuntu/xenial64 流浪盒), 其中有:
mesg n || true
对于该文件中的这一行,更好的选择可能是这样写:
test -t 0 && mesg n
...并且,鉴于作为个人 vagrant 用户很难改变这一点,更直接的解决方案是-l
从 vagrant 配置中删除该选项,例如使用 (within Vagrantfile
):
config.ssh.shell="bash"
(警告:可以想象这种变化可能会产生潜在的负面影响。但是,对于我来说,使用一些基本的 shell 配置程序(例如apt-get update
,等等),它似乎效果很好。)
答案4
这个问题开始发生在我使用多年的 Vagrant 安装中,并且不时升级。我升级到最新的 Vagrant(1.9.1 -> 2.0.3),问题就消失了。(它还消除了其他一些潜入其运行的奇怪东西)
不确定是新版本修复了该问题,还是现有文件/配置在升级过程中得到了更新,或者两者兼而有之。