我正在 telnet 到 Solaris 计算机,并且我的脚本出现上述错误。我意识到这是一个常见问题,解决方案是在我的个人资料中检查“stty擦除^H”行,但我找不到它。
.profile 没有任何对 stty 的引用,而且我在任何地方都没有 .cshrc 。我在我的主目录中执行了 grep,但什么也没得到。
这个问题还有其他来源吗?网上的所有解决方案都引用 .profile 或 .cshrc。谢谢。
答案1
-
要跟踪您的个人资料,请尝试使用以和 选项开头的名称调用您的登录 shell,-x
以便打印 .要了解您的登录 shell 是什么,请运行getent passwd $USER
;您的登录 shell 是该行的最后一个字段(通常/bin/something
)。要调用名称以 开头的 shell -
,请创建一个名称以 开头的符号链接-
并运行它。例如,如果您的登录 shell 是 ksh:
ln -s /bin/ksh ./-ksh
./-ksh -x
rm ./-ksh
我不确定这是否适用于 csh。如果您没有找到任何有趣的内容,请查看/etc
您的点文件:
grep stty /etc/* ~/.* 2>/dev/null
答案2
我有这个,它位于stty
.kshrc 中。请记住,.kshrc 源自所有 ksh 脚本(交互式和非交互式)。如果你运行一个脚本,stty 仍然会触发,尝试在 stdin 上工作,这是一个文件(现在不是 tty)并失败并出现错误。
答案3
来自 csh 手册页:
登录 shell 首先执行系统文件中的命令/etc/csh.cshrc和/etc/csh.login。然后它从用户主目录中的文件执行命令:首先〜/.tcshrc(+) 或者,如果未找到 ~/.tcshrc,〜/.cshrc, 然后~/.历史(或 histfile shell 变量的值),然后〜/.login,最后〜/.cshdirs(或 dirsfile shell 变量的值)(+)。 shell 可能会在 /etc/csh.cshrc 之前而不是之后读取 /etc/csh.login,并且在 ~/.tcshrc 之前而不是之后读取 ~/.login 或 ~/.cshrc 和 ~/.history(如果如此编译);请参阅版本 shell 变量。 (+)
所以有几个文件你可以找到这一行
答案4
您还可以使用tty
测试 tty: tty -s && stty erase ^H
。
tty -s
的返回码指定当前连接是否为 tty。