导出在我的 shell 脚本中不起作用

Posted

技术标签:

【中文标题】导出在我的 shell 脚本中不起作用【英文标题】:export not working in my shell script 【发布时间】:2012-06-02 15:41:50 【问题描述】:

我有两个脚本 1.sh 和 2.sh。

1.sh如下:

#!/bin/sh
variable="thisisit"
export variable

2.sh如下:

#!/bin/sh
echo $variable

根据我的阅读,这样做(导出)可以从另一个 shell 脚本访问变量。但这在我的脚本中不起作用。有人可以帮忙吗?提前致谢。

【问题讨论】:

你是如何执行这些 shell 脚本的? 另见:superuser.com/questions/176783/… 和 unix.stackexchange.com/questions/3507/… 我先在终端运行1.sh,然后在同一个终端运行2.sh... 【参考方案1】:

如果您正在执行sh 1.sh./1.sh 之类的文件,那么您正在子shell 中执行它。

如果您希望在当前 shell 中进行更改,您可以这样做:

. 1.sh
# OR
source 1.sh

请考虑通过reference-documentation。

“当使用source [或.] 运行脚本时,它在现有shell 中运行,脚本创建或修改的任何变量在脚本完成后仍然可用。相反,如果脚本就像filename 一样运行,然后将生成一个单独的子shell(具有一组完全独立的变量)来运行脚本。”

【讨论】:

OP 使用的是/bin/sh,它在许多平台上是最小的 POSIX shell,不支持source 命令。 hmmm.. 我已经提到了 .space 。我提到了source,因为这是我现在看到人们使用的。 1.sh: 3: source: not found :( 我不希望我的 1.sh 从 2.sh 执行,我想先运行 1.sh,关闭后运行 2。 sh .. 并从第二个访问第一个中的变量.... 感谢您的回答 @Xander:如果源代码不适合你,你可以使用<dot><space><your program name> 可能值得添加指向reference documentation 的链接及其描述:“当使用source [或. ] 运行脚本时,它在现有shell 中运行,任何创建的变量或脚本完成后由脚本修改的内容将保持可用。相反,如果脚本以filename 运行,则将生成一个单独的子shell(具有一组完全独立的变量)来运行脚本。”【参考方案2】:

export 将一个变量放入执行 shell 的环境中,以便将其传递给脚本执行的进程,但不会传递给调用脚本的进程或任何其他进程。尝试执行

#!/bin/sh
FOO=bar
env | grep '^FOO='

#!/bin/sh
FOO=bar
export FOO
env | grep '^FOO='

查看export的效果。

要从1.sh 获取变量到2.sh,可以从1.sh 调用2.sh,或者在1.sh 中导入1.sh

#!/bin/sh
. ./1.sh
echo $variable

【讨论】:

以上是关于导出在我的 shell 脚本中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

@reboot 在 CRON 中不起作用

导出到 CSV/Excel 功能在 Datatable 中不起作用?

导入和导出方法在js文件中不起作用[重复]

.bash_profile中定义的别名在OS X中不起作用

基本 jQuery 脚本在 NavBar 部分视图中不起作用

脚本在django模板中不起作用