对此进行了新的,根本性的发展。到最后阅读。
为x86_64-linux-thread-multi构建的perl 5版本18,版本2(v5.18.2)
RH6
我有一个perl脚本,该脚本可以执行system()调用,该调用运行一个tcsh脚本,但是对于一个用户,它不会从该系统调用中返回。代码是这样的...
#!/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
有趣的是,它会打印“在外壳程序脚本中,将要退出”,下一步是“退出”,但它只是不这样做,至少对于该用户而言。在我看来,之前出现的所有命令都是无关紧要的,因为它到达了此“即将退出”消息。看来^ C正在中断shell脚本(不会退出)并返回到继续执行的perl脚本。
所以我的问题与了解为什么这个人挂死有关。他的环境中肯定有引起问题的原因,但我不知道是什么原因。返回值“ 2”是什么意思?可能没什么意思,因为我被^ C打断了。
感谢您的帮助
新发展
这与perl无关。如果aa.csh脚本只是...
exit
然后用户运行...
tcsh aa.csh
它挂了。
这是怎么回事?
主持人,是否应该删除此线程,并且我应该重新发布(因为这根本不同)?
答案 0 :(得分:1)
问题是一个损坏的.history文件。
答案 1 :(得分:0)
让他逃跑
remote
在which exit
提示符下输入。如果没有说类似
tcsh
但类似
exit: shell built-in command
然后您发现了问题。
如果exit: aliased to sleep 99999
确实是您的exit
脚本的最后一行,则它是多余的,并且您还尝试使用在以下位置不调用aa.csh
的脚本版本:结束。