Linux 调用子shell脚本后不会返回执行

Linux 调用子shell脚本后不会返回执行,linux,shell,Linux,Shell,我在我管理的一个生产环境中观察到一些非常奇怪的行为。我从未见过这样的事情,也许你们中的某个人有一个想法 基本上我有两个shell脚本,让我们称它们为主脚本和从脚本。主脚本是我从bash命令行开始的脚本,从脚本是从主脚本中调用的 下面是主脚本的相关部分,它调用名为“import_CSV2UNISERV_L.sh”的从脚本: SCRIPT_EXEC_IDS=$($SCRIPTDIR/import_CSV2UNISERV_L.sh init NL_INTER kub-b.puc.ov.otto.de

我在我管理的一个生产环境中观察到一些非常奇怪的行为。我从未见过这样的事情,也许你们中的某个人有一个想法

基本上我有两个shell脚本,让我们称它们为主脚本和从脚本。主脚本是我从bash命令行开始的脚本,从脚本是从主脚本中调用的

下面是主脚本的相关部分,它调用名为“import_CSV2UNISERV_L.sh”的从脚本:

SCRIPT_EXEC_IDS=$($SCRIPTDIR/import_CSV2UNISERV_L.sh init NL_INTER kub-b.puc.ov.otto.de 3>&1 1>&4)
typeset -i RETCODE=$?
随后,从脚本将在某个时刻以出口0结束执行,此时我希望主脚本继续执行typeset命令。但这永远不会发生

当我使用bash-x执行脚本时,我可以看到出口0仍在处理中,但在此之后,执行将停止并永远挂起。这是我们可以观察到的最后一个输出:

+ echo '15.10.2014 07:40:55 AM - Ende import_CSV2UNISERV_L.sh'
15.10.2014 07:40:55 AM - Ende import_CSV2UNISERV_L.sh
+ exit 0
我不知道这是什么原因,甚至不知道如何进一步调试,我完全迷路了:-

我确实发现,当退出0是从脚本中的第一个命令时,一切正常。这似乎与我在从属脚本中所做的某些事情有关,但该脚本有数百行长,因此几乎不可能通过反复试验找出是哪一行导致了这一点

这一切的另一个奇特之处是,自2010年我检查subversion以来,这些脚本在生产环境中一直未被修改!,从那时起,他们每天都跑得很顺利。直到上周末,当我们发布了一个本应与这些脚本无关的软件时,问题才出现了。似乎有联系,但我不知道在哪里

我想我更多地是在寻找一种方法来进一步调试它,如何找出什么阻碍了执行,而不是一个完全成熟的解决方案,它会期望有点高:-

任何关于我如何处理这种情况的想法都将不胜感激。提前感谢您抽出时间

致意


马里奥

鉴于最近发生的事件,我假设你有一个新版本的bash。我会检查bash的新旧版本是否存在差异,并查看是否存在任何不兼容的更改,例如,不同版本的阵列工作方式是否不同。我的一个同事也能解决这个问题。随着上周末软件发布的到来,他们引入了额外的输出流。我不确定我在这里使用的术语是否正确……我不完全理解他向我解释的内容。我的脚本使用nohup启动后台进程,nohup继承了这些额外的输出流,因此调用shell被阻塞,直到那些bacjground进程终止。修复方法是将3>&-4>&-添加到nohup命令行的末尾,这显然会关闭这些额外的流。