考虑我有一个需要环境设置的程序。它在Perl中,我想修改环境(搜索库是一个特殊的位置)。
每当我弄乱在UNIX中执行操作的标准方法时,我付出了沉重的代价,我会在灵活性方面付出代价。
我知道通过使用一个简单的shell脚本,我会在进程树中注入一个额外的进程。访问其自己的进程树的任何进程都可能会抛出一点循环。
任何以非平凡方式递归的东西都需要抵御环境的多次扩展。
任何类似于一系列程序(或关闭并打开STDIN
,STDOUT
或STDERR
)的内容都是我最关注的领域。
我在为自己做什么?
答案 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,因为这样就可以获得进程控制的预期行为等等。