使用shell脚本包装程序的陷阱?

时间:2009-04-16 00:47:34

标签: bash

考虑我有一个需要环境设置的程序。它在Perl中,我想修改环境(搜索库是一个特殊的位置)。

每当我弄乱在UNIX中执行操作的标准方法时,我付出了沉重的代价,我会在灵活性方面付出代价。

我知道通过使用一个简单的shell脚本,我会在进程树中注入一个额外的进程。访问其自己的进程树的任何进程都可能会抛出一点循环。

任何以非平凡方式递归的东西都需要抵御环境的多次扩展。

任何类似于一系列程序(或关闭并打开STDINSTDOUTSTDERR)的内容都是我最关注的领域。

我在为自己做什么?

1 个答案:

答案 0 :(得分: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,因为这样就可以获得进程控制的预期行为等等。