如何通过shell脚本导出变量?

Cpp*_*ner 15 shell ubuntu

#! /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)

我希望这有帮助.

  • 这个答案应该有一个滴答声 (2认同)
  • 这个答案应该有+1 (2认同)

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 执行脚本的输出)


Wil*_*llC 6

在这里回答我自己的问题,使用上面的答案:如果我有多个相关变量要导出,这些变量使用相同的值作为每个导出的一部分,我可以这样做:

#!/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应该显示您的期望。

  • `source` 只需要读取权限,您只需要 `chmod +x` 来执行您真正想要执行的文件。 (3认同)
  • 不能告诉你我的头撞在桌子上4个多小时后找到这个答案我有多高兴......现在我终于可以清理血液并在我的额头上贴上创可贴哈哈哈 (2认同)