导出在我的 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 脚本中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
导出到 CSV/Excel 功能在 Datatable 中不起作用?