【问题标题】:Tcsh script does not exitTcsh 脚本不退出
【发布时间】:2016-02-29 20:25:33
【问题描述】:

我正在运行 CentOS 7,但遇到 tcsh 脚本问题。

我有一个名为 quittest 的简单脚本。

#!/bin/tcsh
echo "Simple Test"
exit 0

当我从终端运行退出测试时,我得到了

"Simple Test"

它不会退出。我可以 Control+C 退出。我通过以下方式检查此状态:

ps辅助

它显示退出测试状态为 S+(前台可中断睡眠)。如果我将此脚本更改为 bash 或 sh,它运行良好,并按预期退出。

我不能只切换到另一个 shell,因为我的用户使用 tcsh 编写的脚本非常复杂。我们正在用 CentOS 7 替换 OpenSuSE 12.3。

Tcsh 版本 6.18.01-7。 SELinux 设置为允许测试此问题。

【问题讨论】:

  • dos2unix quittest 会解决这个问题吗?别的。 .... tcsh 6.07.02 版“它对我有用”,我也完全希望它能够工作。可能还有其他问题。可以在文件末尾添加一个额外的\n 吗?并且也许检查 CentOS 论坛,看看其他人是否有这个问题,并且有可用的补丁。祝你好运!!
  • 我尝试更新到最新的 tcsh 软件包。它从 6.18.01-7 到 6.18.01-8。这表明没有改善。我在 CentOS 论坛中找不到任何与此问题相关的内容(我在此处发帖之前已检查过)。有些错误报告似乎与我的问题无关。
  • 试试cat -vet quittest。你在行尾看到^Ms 吗?如果是这样,那么dos2unix quittest。否则,我没有想法(目前)。祝你好运!
  • 每行末尾都有 $ 与您列出的命令。这是一些古怪的行为。我的旧 tcsh shell (6.17.02) 没有这样的问题。我会继续调查...
  • 对不起,应该说,$^Is 预计来自 cat -vet。正如您没有看到^Ms 那样,~/.tcshrc 或其他启动文件(我不再记得所有这些文件)中可能有一些东西为奇怪的行为设置了标志。检查man tcsh 并希望有一个startup 部分。您的 2 个操作系统的基本安装之间可能存在 /etc/tcshrc(或类似名称)。啊,还有 SELinux,不知道这会增加什么。但是真的很难想象会导致这种情况的外壳“功能”。 其他人可以重现这个问题吗?祝你好运。

标签: linux shell scripting centos7 tcsh


【解决方案1】:

原来,我的 ~/.history 文件是问题所在。我删除了它,脚本按预期运行。一定是在某个时候被权限问题挂断了。

【讨论】:

  • 大声笑,谁会猜到。很高兴你找到了。如果您想将 tcsh 转换为 bash/ksh,我可以从事合同工作;-) 祝您好运!
  • 我在 CentOS6 上遇到了同样的问题,它随机启动,不知道它是如何搞砸的,但这听起来类似于我发现的 RedHat 的this bug report。也许它相关?如该报告中所述,我们的服务器存储位置确实位于网络位置。根据这个答案删除我的~/.history 似乎已经解决了这个问题。
【解决方案2】:

我在所有 Fedora 23、tcsh 版本 6.19.00-3.fc23 上都遇到了同样的问题。
原因是 ~/.history.lock 文件。删除锁定文件解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2011-11-01
    • 1970-01-01
    • 2018-04-14
    相关资源
    最近更新 更多