为什么在Perl返回中不进行“系统”调用?

时间:2018-09-05 19:15:17

标签: linux perl tcsh

对此进行了新的,根本性的发展。到最后阅读。

为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

它挂了。

这是怎么回事?

主持人,是否应该删除此线程,并且我应该重新发布(因为这根本不同)?

2 个答案:

答案 0 :(得分:1)

问题是一个损坏的.history文件。

答案 1 :(得分:0)

让他逃跑

remote
which exit 提示符下输入

。如果没有说类似

tcsh

但类似

exit: shell built-in command

然后您发现了问题。

如果exit: aliased to sleep 99999 确实是您的exit脚本的最后一行,则它是多余的,并且您还尝试使用在以下位置不调用aa.csh的脚本版本:结束。