如何解决 Vagrant 中的“ttyname 失败:设备的 ioctl 不适当”?

如何解决 Vagrant 中的“ttyname 失败:设备的 ioctl 不适当”?

使用此代码片段(内联 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.shellbash -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),问题就消失了。(它还消除了其他一些潜入其运行的奇怪东西)

不确定是新版本修复了该问题,还是现有文件/配置在升级过程中得到了更新,或者两者兼而有之。

相关内容