灰
#! /bin/sh
export x=/usr/local
Run Code Online (Sandbox Code Playgroud)
我们可以source ./a在命令行中做.但我需要通过shell脚本进行导出.
b.sh
#! /bin/sh
. ~/a.sh
Run Code Online (Sandbox Code Playgroud)
没有错误......但$x在命令行中什么都不会显示.所以它没有出口.
知道如何让它工作吗?
灰
#! /bin/sh
export x=/usr/local
-----------
admin@client: ./a.sh
admin@client: echo $x
admin@client: <insert ....>
Run Code Online (Sandbox Code Playgroud)
Emm*_*uel 61
您可以将export语句放在shell脚本中,然后使用'source'命令在当前进程中执行它:
source a.sh
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助.
Chr*_*ton 20
您无法通过shell脚本进行导出,因为shell脚本在子shell进程中运行,并且只有子shell的子进程才会继承导出.
使用source的原因是让当前shell执行命令
将导出命令放在诸如.bashrc之类的文件中是很常见的,bash将在启动时获取该文件(或其他shell的类似文件)
另一个想法是你可以创建一个shell脚本,它在输出时生成一个导出命令:
shell$ cat > script.sh
#!/bin/sh
echo export foo=bar
^D
chmod u+x script.sh
Run Code Online (Sandbox Code Playgroud)
然后让当前shell执行该输出
shell$ `./script.sh`
shell$ echo $foo
bar
shell$ /bin/sh
$ echo $foo
bar
Run Code Online (Sandbox Code Playgroud)
(请注意,脚本的调用由反引号包围,以使shell 执行脚本的输出)
在这里回答我自己的问题,使用上面的答案:如果我有多个相关变量要导出,这些变量使用相同的值作为每个导出的一部分,我可以这样做:
#!/bin/bash
export TEST_EXPORT=$1
export TEST_EXPORT_2=$1_2
export TEST_EXPORT_TWICE=$1_$1
Run Code Online (Sandbox Code Playgroud)
并保存为例如 ~/Desktop/TEST_EXPORTING
最后 $chmod +x ~/Desktop/TEST_EXPORTING
——
之后,运行它 source ~/Desktop/TEST_EXPORTING bob
然后检查export | grep bob应该显示您的期望。