Shell 脚本在终端中执行,但不在 Shell 脚本文件中

Pat*_*ryk 0 shell bash shell-script environment-variables

可能的重复:
如何在 bash 脚本中“导出”变量?

我在从文件执行脚本时遇到问题。当我输入命令行时

PATH=$PATH:/home/

然后PATH适当更改。但是当我执行这个文件时:

#!/bin/sh
#provided by me

PATH=$PATH:/home/
echo "done"
exit 0
Run Code Online (Sandbox Code Playgroud)

done已打印但未PATH更改。为什么会这样?

Kyl*_*nes 6

环境变量更改适用于当前进程和任何后续子进程,但不适用于父进程。所以如果你运行一个脚本,它不会影响运行它的 shell 的环境变量。您需要source使用.内置的shell来编写脚本。IE

. /path/to/script
Run Code Online (Sandbox Code Playgroud)

这会导致当前 shell 执行文件中的命令,而不是运行子进程。

  • 在 /etc/profile 中设置 PATH。这将影响 sh、ksh 和 bash 用户。/etc/zprofile 是供 zsh 用户使用的文件。 (2认同)