我想为我的应用程序框架执行一个非常简单的安装过程。我已经一切正常,但我想设置两个环境变量。我想更新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_command
和myapp_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.install
到my.install.real
,并创建一个名为 的新文件my.install
:
export HOME='SAMPLE VALUE'
export PATH='SAMPLE VALUE'
./my.install.real
unset HOME
unset PATH