从脚本设置永久环境变量的正确方法

从脚本设置永久环境变量的正确方法

我想为我的应用程序框架执行一个非常简单的安装过程。我已经一切正常,但我想设置两个环境变量。我想更新PATH并设置一个HOME变量。

我知道我无法在父进程上设置 var,那么我该怎么做呢?我不想要求用户执行source foo,我希望他们能够运行foo install并完成任务。

当然,有什么办法吗?

编辑:抱歉 - 我的意思不是实际的HOME,我的意思是MY_FRAMEWORK_HOME变量!

答案1

一般来说,变量$HOME不是你应该搞乱的东西;它取决于用户。您不希望用户突然拥有不同的主目录! (如果你这样做,你应该编辑他设置的主目录/etc/passwd——这当然需要root权限。)

$PATH是另一回事,应该设置在 his~/.bashrc或中~/.bash_profile。关于应该使用哪些参数有多种说法,我不会在这里讨论。

假设您想附加/var/myapp/bin到用户的路径。您可以通过添加以下行来完成此操作:

export PATH="$PATH:/var/myapp/bin"

到用户的~/.bashrc.讨论了一种这样做的好方法,同时避免添加已经存在的行vi堆栈交换上:

ex -sc '$a
export PATH="$PATH:/var/myapp/bin"
.
$-,$!uniq
x' ~/.bashrc

请注意,如果您以这种方式添加多于一行,则避免添加它们(如果它们已经存在)的相同安全检查将不起作用。为此,您需要不同的逻辑。


您还可以考虑采取不同的操作方案:将命令二进制文件的符号链接添加到 中/usr/local/bin,该符号链接通常已包含在$PATH.

因此,正如上面的示例所示,假设您要添加/var/myapp/bin到用户的 PATH 中。您可能首先想要执行此操作的原因是因为您有一些命令(shell 脚本或二进制文件,并不重要),因为/var/myapp/bin您希望用户能够从命令行执行。假设这些命令是myapp_commandmyapp_othercommand

您可以通过创建符号链接来使它们在 PATH 中可用,如下所示:

ln -s /var/myapp/bin/myapp_command /usr/local/bin/myapp_command
ln -s /var/myapp/bin/myapp_othercommand /usr/local/bin/myapp_othercommand

第一个参数ln -s是 TARGET,第二个参数是您要创建的指向目标的 LINK 名称。 (有关更多信息,请参阅man ln。)

答案2

只是出口变量:

export NAME1="value1"
export NAME2="value2"
./my.install

编辑:可以通过以下 shell 执行此操作(我知道):

  • 短跑
  • 巴什
  • 肯什哈
  • 中兴

编辑 2:移动my.installmy.install.real,并创建一个名为 的新文件my.install

export HOME='SAMPLE VALUE'
export PATH='SAMPLE VALUE'
./my.install.real
unset HOME
unset PATH

相关内容