我们使用的是 CentOS 6.9,我的一个用户遇到了一个错误,如果他们登录,屏幕将被冻结,直到他们按 Ctrl+C。当他们退出时也会发生同样的事情。当我是 root 和 su - 作为麻烦的用户时,也会发生这种情况。该用户使用 tcsh,但我还没有看到任何其他使用 tcsh 的用户遇到这个问题
[root@boop] # su - troublesome_user
(hangs until terminate)
^C[troublesome_user@boop ~]$ exit
logout
(hangs until terminate)
^C [root@boop] #
我最熟悉 bash,因此我检查了 .bash_profile 和 .bash_rc,但我现在知道 tcsh 使用一组不同的 .profile 文件。我查看了他们的 .cshrc 文件,没有发现任何奇怪的东西。
内容如下:
setenv LC_ALL C
set path = ($path /nfs/bin)
有人知道 tcsh 的任何功能是否可能导致此问题吗?
谢谢!
答案1
首先,我会检查 tcsh 启动时执行命令的所有位置。
这手册页有这样的说法(我已将文件位置加粗):
登录 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 变量。 (+)
如果这没有引导你到任何地方,我会尝试以下两件事:
- 以有问题的用户身份登录并让它挂起,切换到不同的控制台并检查
w
- 这应该会显示该用户正在运行的内容。 Ctrl+Z
而不是Ctrl+C
- 应该暂停正在运行的进程而不是中断它。然后jobs
看看什么被暂停了。
编辑:正如 JdeBP 在评论中指出的那样,您还可以在 su 中设置tcsh-x
和-V
tcsh 选项 - 尽管我认为您可以找到-X
.像这样的东西:
su - troublesome_user -- -X
- -x 在执行前回显所有命令
- -v 命令输入在历史替换后回显
- -X 与 -x 相同,但甚至在处理 .tcshrc 之前也适用
- -V 与 -v 相同,但甚至在处理 .tcshrc 之前也适用