在/ usr / bin / env中设置环境变量会在Linux上挂起进程

时间:2016-09-02 02:47:05

标签: linux shell shebang

虽然Linux上env的人似乎表明你可以在执行命令之前设置新的环境变量。不幸的是,当我在Linux系统上的文件中设置新变量时,该文件永远不会执行。

#!/usr/bin/env VAR1=foo bash
echo $VAR1

当我在CentOS或Ubuntu机器上执行此文件时,它就在那里。

$ ./shell-env.sh
<nothing happens>

我发现特别奇怪的是,这在带有BSD env的OS X上完全正常。

$ ./shell-env.sh
foo
$

这只是BSD env和Linux env之间的区别吗?为什么Linux的手册页似乎说它应该像在BSD上一样工作?

P.S。我的用例是覆盖PATH变量,因此我可以尝试在系统上找到ruby,但PATH上没有{。}}。

提前谢谢!

1 个答案:

答案 0 :(得分:2)

有一种方法可以在执行Ruby脚本之前操作环境,而不使用某种类型的包装器脚本,但它并不漂亮:

#!/bin/bash
export FOO=bar
exec ruby -x "$0" "$@"

#!ruby
puts ENV['FOO']

这通常适用于您需要操纵的神秘情况。在执行程序之前PATHLD_LIBRARY_PATH,由于某种原因需要自包含它。它适用于Perl,也可能适用于其他人!