Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何仅在脚本期间设置环境变量?_Linux_Bash_Environment Variables - Fatal编程技术网

Linux 如何仅在脚本期间设置环境变量?

Linux 如何仅在脚本期间设置环境变量?,linux,bash,environment-variables,Linux,Bash,Environment Variables,在bash中的Linux(Ubuntu11.04)上,是否可以临时设置一个环境变量,该变量在脚本期间仅与普通变量不同?例如,在shell脚本中,通过临时将HOME设置为当前工作目录中的一个文件夹,使保存到HOME的应用程序可移植,然后启动该应用程序。 export HOME=/blah/whatever 在脚本中希望发生更改的位置。由于每个进程都有自己的一组环境变量,因此当脚本终止时(以及具有已更改环境的bash实例),此定义将自动停止具有任何意义。如果希望设置持续时间超过脚本的持续时间,则会

在bash中的Linux(Ubuntu11.04)上,是否可以临时设置一个环境变量,该变量在脚本期间仅与普通变量不同?例如,在shell脚本中,通过临时将HOME设置为当前工作目录中的一个文件夹,使保存到HOME的应用程序可移植,然后启动该应用程序。

export HOME=/blah/whatever

在脚本中希望发生更改的位置。由于每个进程都有自己的一组环境变量,因此当脚本终止时(以及具有已更改环境的bash实例),此定义将自动停止具有任何意义。

如果希望设置持续时间超过脚本的持续时间,则会更加困难,这会产生误导
export
将变量传递给子shell,但它不控制父shell。如果您正在编写一个以“#!/bin/sh”等开头的脚本,则当脚本退出时,您设置的任何变量都将消失。@brightlancer,这是真的,但似乎与我编写的任何内容都不矛盾。(除了脚本可能启动后台进程之外,但我认为这超出了OP的复杂程度,只会造成混乱)。导出是不必要的。此外,您的答案只有在他的脚本调用解释器(#!/bin/sh等)时才有效。如果他的“脚本”没有,那么你刚才告诉他的内容将持续到脚本结束之后。这就是为什么我说你的答案是误导性的——它可能是正确的,也可能不是,但它肯定有一部分是不必要的和令人困惑的,因为它可能会让人认为“导出”是他所寻找的必要元素。@brightlancer:如果OP的脚本调用子脚本,而子脚本本身依赖于$HOME,则导出是必要的,我不敢假设事实并非如此。此外,bash将生成一个子shell来运行脚本,即使该脚本没有shebang行,但只是一个设置了execute位的文本文件。试试看——脚本中的变量赋值在调用它的shell中不可见。只有当您显式地
source
脚本时,它才会由您在其中键入命令的同一个shell执行。@brightlancer:如果他希望从脚本执行的任何命令继承
$HOME
,则需要导出。如果他不这样做,并且
$HOME
的设置只是为了脚本本身的利益,那么他最好修改脚本,使其引用的内容不是
$HOME
。或者
VAR=value myScript args…
1。为什么
PATH=$PATH:XYZ echo$PATH | grep XYZ
没有任何输出?2.使用和不使用
env
有什么区别?因为shell在执行echo命令之前会展开PATH变量。你需要推迟扩张。单向:
PATH=$PATH:XYZ sh-c'echo$PATH'| grep XYZ
——单引号是关键,使用
env
和不使用它有什么区别?这在像
IFS=$'\n'这样的单行中似乎不适用于l in行;做完成
为了运行
vblank\u mode=0 glxgears
,我自己已经做了很多次了。它可以工作,但它也表示运行后未找到
vblank\u mode=0:command
,而预加
env
不会导致此问题。[测试…]显然zsh不喜欢它(但仍然正确地使用它),但是bash对此没有问题。我想从现在开始我将使用
env
方法。使用脚本它可以工作,但是
VAR1=“hello”echo$VAR1
不返回任何内容如何?@Zibri它是关于扩展发生的时间。您可能可以这样做:
VAR1=“hello”bash-c'echo$VAR1'
投票支持这一点,因为它表明即使对于多个环境变量也是可能的。
env VAR=value myScript args ...
VAR1=value1 VAR2=value2 myScript args ...