Bash环境变量和查找安装目录

问题描述:

我有一个基本上初始化应用程序并设置参数的Bash脚本。其中一个参数是OpenOffice的位置。现在,OpenOffice在安装时不会设置环境变量。Bash环境变量和查找安装目录

找到安装的应用程序的位置并缓存该信息的最佳方法是什么,以便下次不必执行I/O操作?

我在想的只是在/ usr /上找到一个具有特定文件的OpenOffice目录。当它被发现时,将该目录存储在一个环境变量中,并在此脚本中检查是否设置了环境变量并且是一个目录,如果是这样,则使用它,如果不是再次搜索。

这将允许脚本在没有用户交互的情况下工作,但也允许用户自己设置路径(因为它是一个环境变量)。

这似乎是一个“不好的做法”,所以我希望也许别人能给我获取有关软件安装信息的常用方法。如果有帮助,OpenOffice很可能会使用aptitude进行安装。

我平时已经看到了它做的方式是像这样的代码:

[ -z "$OO_EXE" ] && OO_EXE=/usr/bin/oo # or whatever the executable is called 

然后你可以总是假设OO_EXE环境变量在脚本中设置以后。在运行脚本之前,用户可以通过在环境中设置OO_EXE来覆盖默认值,但是如果他不这样做,那么脚本将回到默认值。

如果您想在第一次脚本运行时动态地找到默认设置,并且每隔一段时间重复使用一次,那么我会在第一次运行脚本时提示用户输入路径,在用户的脚本中放置点文件主目录,并且每隔一次读取该文件。

+0

聪明的想法。该脚本是一个/etc/init.d脚本,用于处理运行守护进程。第一次跑步时不得不问这样一个问题常见的做法是什么?也许我应该在安装守护进程时向他们询问这些信息? – William 2009-12-08 08:08:16

+0

是的,我想问他们什么时候安装守护进程是个好主意。从init.d脚本提示不太好。因为它是一个守护进程,不过,将配置文件放在/ etc而不是用户的主目录中可能会更好。 – 2009-12-08 08:11:58

+0

其实还有另外一个问题。当您使用包装系统(如aptitude或yum)安装应用程序并且软件包对另一个软件包有依赖性时。它如何知道文件所在的位置?在我看来,软件包基于发行版安装在不同的目录中,这可能是错误的。他们只是检查默认值,如果它不在请求用户输入?你可能不知道这个答案,但如果你这样做会有帮助。 :) – William 2009-12-08 08:12:23

许多应用程序在安装时会设置这些值。例如,当用户为您的应用运行配置脚本时,用户可以指定ooffice的位置。该脚本将使用该值或尝试找到它,或者如果用户未指定它,则使用默认值。应用程序安装后,它将具有硬编码值。

+0

+1为您的答案。看起来我最终会这样做。谢谢你们的帮助! – William 2009-12-08 08:27:19

您可以使用命令which

[email protected]:~$ which openoffice.org 
/usr/bin/openoffice.org 
[email protected]:~$