我怎样才能最好地编写脚本以永久地追加到用户的PATH变量,无论他们使用的shell类型如何?
很容易简单地在现有的启动文件中添加一行这样的行(对于bash):
echo "export PATH=$PATH:~/newpath" >>~/.bash_profile
对不同的shell类型执行此操作的第一个问题是启动文件的名称可能不同(甚至对于bash shell,它可能具有多个不同名称之一)。第二个问题是新的启动行因shell类型而异。第三个问题是我的脚本进程需要父类型的shell类型,而不是脚本进程本身,它将使用shebang来确保bash。
使用这样的命令很容易解决第三个问题:
ps -p $PPID -oargs=
在我的脚本中调用从shell返回父shell的连字符前缀名称,即使脚本本身始终在bash中运行。
如果我将适用性限制在几个shell类型中,第一个问题就可以解决了,我相信bash,csh,tcsh和zsh就足够了,我可以有一个剩下的案例,只是给出一个有用的消息对于任何其他类型的shell不支持。在感兴趣的操作系统(Mac OS X)上的bash的特定情况下,我需要按顺序检查现有文件.bash_profile,.bash_login和.profile,并编辑存在的第一个文件。它应该与其他列出的shell一样简单或容易。
第二个问题可以通过查看如何为每种不同类型的shell设置PATH变量来解决。我也不认为这也很难。
完全不同的方法可能是简单地查找支持的shell的所有启动文件,并修改找到的每个shell类型的第一个启动文件。
一个重要的改进是grep每个被修改的启动文件,以确保它没有被修改,但可能有一个不完整或拙劣的先前修改。
现在对于那些说我应该让用户这样做的人来说,情况是我正在将一个运行在shell中的Linux程序移植到Mac OS X终端应用程序环境中。在这种情况下,大多数用户都不熟悉如何设置shell变量,以及如何使用文本编辑器来编辑启动文件。所以我认为最好是提供这样的罐装解决方案。 Solaris上的这个程序的用户也有一个历史,它使用csh或csh的派生而不是bash,所以我觉得我需要做好准备。