虽然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
上没有{。}}。
提前谢谢!
答案 0 :(得分:2)
有一种方法可以在执行Ruby脚本之前操作环境,而不使用某种类型的包装器脚本,但它并不漂亮:
#!/bin/bash
export FOO=bar
exec ruby -x "$0" "$@"
#!ruby
puts ENV['FOO']
这通常适用于您需要操纵的神秘情况。在执行程序之前PATH
或LD_LIBRARY_PATH
,由于某种原因需要自包含它。它适用于Perl,也可能适用于其他人!