用于永久添加到不同shell

时间:2016-03-23 03:40:03

标签: macos bash csh

我怎样才能最好地编写脚本以永久地追加到用户的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,所以我觉得我需要做好准备。

0 个答案:

没有答案