Art*_*son 6 linux shell shebang
而 Linux 上的 manenv
似乎表明您可以在执行命令之前设置新的环境变量。不幸的是,当我在 Linux 系统上的文件的 shebang 中设置新变量时,该文件永远不会执行。
#!/usr/bin/env VAR1=foo bash
echo $VAR1
Run Code Online (Sandbox Code Playgroud)
当我在 CentOS 或 Ubuntu 机器上执行此文件时,它就放在那里。
$ ./shell-env.sh
<nothing happens>
Run Code Online (Sandbox Code Playgroud)
我觉得特别奇怪的是,它在带有 BSD 的 OS X 上运行得非常好env
。
$ ./shell-env.sh
foo
$
Run Code Online (Sandbox Code Playgroud)
env
这只是 BSD和 Linux之间的区别吗env
?为什么 Linux 的手册页似乎说它的工作方式应该与 BSD 上的工作方式相同?
PS 我这里的用例是覆盖PATH
变量,所以我可以尝试在系统上找到 a ruby
,但它不在PATH
.
先感谢您!
有一种方法可以在执行 Ruby 脚本之前操纵环境,而无需使用某种包装脚本,但它并不漂亮:
#!/bin/bash
export FOO=bar
exec ruby -x "$0" "$@"
#!ruby
puts ENV['FOO']
Run Code Online (Sandbox Code Playgroud)
PATH
这通常是为深奥的情况保留的,例如您需要LD_LIBRARY_PATH
在执行程序之前进行操作,并且由于某种原因它需要是独立的。它适用于 Perl,也可能适用于其他人!
归档时间: |
|
查看次数: |
2507 次 |
最近记录: |