2009-04-16 42 views
1

让我们假装我有一个需要设置环境的程序。让我们假装它的Perl,并且我想修改环境(搜索特定的库)。每当我捣乱在UNIX中执行事情的标准方式时,我都会付出沉重的代价,并且我会在灵活性方面付出代价。我知道通过使用简单的shell脚本,我会在流程树中注入一个额外的流程。任何进程访问自己的进程树可能会引发一点点循环。任何以不平凡的方式递归的东西都需要防御多次扩展的环境。任何类似于节目(或关闭和打开STDIN,STDOUT或STDERR)的东西都是我最关心的问题。我对自己做什么?使用shell脚本来包装程序的缺陷?

回答

3

我对自己做什么?

让自己一切都好起来吧?

为了设置环境而在shell脚本中包装程序实际上是相当标准的,风险很小,除非你试图做一些真的奇怪。

如果您真的担心会有更多的流程 - 而且UNIX流程的设计非常便宜 - 那么请使用exec关键字,而不是分叉新流程,只需执行一个新的可执行文件来代替目前的一个。所以,在这里,你可能有

#!/bin/bash - 
FOO=hello 
PATH=/my/special/path:${PATH} 
perl myprog.pl 

你只说

#!/bin/bash - 
FOO=hello 
PATH=/my/special/path:${PATH} 
exec perl myprog.pl 

和备用过程消失。

然而,这个诀窍几乎是不值得花费的;一个反例是,如果你不能改变默认的shell,可以说

$ exec zsh 
仅仅是在原地运行的shell的

,因为这样你得到的过程控制预期的行为等等是非常有用的。

+0

我想我会接受这个。我很担心。 – ojblass 2009-04-16 02:13:42