【发布时间】:2018-09-07 03:56:05
【问题描述】:
在这方面有新的、激进的发展。到最后阅读。
为 x86_64-linux-thread-multi 构建的 perl 5,版本 18,subversion 2 (v5.18.2)
RH6
我有一个 perl 脚本,它发出一个运行 tcsh 脚本的 system() 调用,但对于一个用户,它不会从该系统调用返回。代码是这样的……
#!/usr/bin/env perl
print "about to make the system call...\n";
$rv = system("tcsh aa.csh");
print "system call finished, return val = $rv\n";
exit;
还有 aa.csh 脚本...
echo "In shell script"
mkdir foo
source someotherscript.csh
ln -s xxx yyy
echo "In shell script, about to exit"
exit
此脚本会为除一个以外的所有用户运行完成。他看到了……
about to make the system call...
In shell script
In shell script, about to exit
它只是挂起。如果我点击 ^C,它就完成了..
system call finished, return val = 2
有趣的是,它会打印“在 shell 脚本中,即将退出”,下一步是“退出”,但它只是不这样做,至少对于这个用户来说不是。在我看来,它之前的所有命令都是无关紧要的,因为它到达了这个“即将退出”的消息。看来 ^C 正在中断 shell 脚本(不会退出)并返回到继续完成的 perl 脚本。
所以我的问题与了解为什么它为这个人挂起。他的环境中一定有什么东西导致了这个问题,但我不知道是什么。 “2”的返回值是什么意思?可能没有任何意义,因为我用 ^C 打断了。
感谢您的帮助
新发展
这与 perl 无关。如果 aa.csh 脚本只是...
exit
然后用户运行...
tcsh aa.csh
挂了。
这是怎么回事?
版主,这个帖子应该被删除,我应该重新发布吗(因为这完全不同)?
【问题讨论】:
-
someotherscript.csh是做什么的? -
我必须调查一下。但是,考虑到它已经过去了,直到退出命令,这真的重要吗?此外,其他人运行此脚本也没有问题。
-
tcsh 脚本的第一行通常应该是
#!/bin/tcsh -f。-f告诉 shell 不要获取用户的.login文件。或者您可以将脚本调用为tcsh -f aa.csh而不是tcsh aa.csh。如果添加-f解决了该用户的问题,那么问题出在该用户的.login(或其他一些启动文件)中。 -
请先阅读minimal reproducible example,然后再在这里发布更多问题。祝你好运。
-
清理一切。让该用户注销(并可能重新启动机器)并重试。如果相同,他们应该删除(并保存!)他们的 shell 配置文件并重试。如果可行,那么他们可以开始一次放回一点配置。