【发布时间】:2011-04-22 17:54:41
【问题描述】:
这里的主要问题是:是否有编写可在多个 UNIX 平台上运行的 UNIX shell 脚本的标准方法。
例如,我们有许多主机运行不同风格的 UNIX(Solaris、Linux)和不同版本,所有这些主机的文件系统布局都略有不同。有些主机在 /usr/local/gnu/bin/ 中有 whoami,有些在 /usr/bin/。
我们所有的脚本似乎都以稍微不同的方式处理这个问题。有些人对架构有案例陈述:
case "`/script/that/determines/arch`" in
sunos-*) WHOAMI=`/usr/local/gnu/bin/whoami` ;;
*) WHOAMI=`/usr/bin/whoami` ;;
esac
通过这种方法,您可以确切地知道正在执行什么二进制文件,但是如果执行的命令很多,那就很麻烦了。
有些人只是设置PATH(基于上面的arch脚本)并仅通过他们的名字调用命令。这很方便,但是您无法控制运行哪个命令,例如如果你有:
/bin/foo
/bin/bar
/other/bin/foo
/other/bin/bar
您将无法同时使用/bin/foo 和/other/bin/bar。
我能想到的另一种方法是在每台主机上都有一个本地目录,其中包含指向每台主机上所需的每个二进制文件的符号链接。例如:
Solaris 主机:
/local-bin/whoami -> /usr/local/gnu/bin/whoami
/local-bin/ps -> /usr/ucb/ps
Linux 主机:
/local-bin/whoami -> /usr/bin/whoami
/local-bin/ps -> /usr/ps
人们还使用哪些其他方法?请不要只说用 Python 编写脚本……在某些任务中,bash 是完成简单任务的最简洁实用的方法。
【问题讨论】:
标签: bash unix scripting multiplatform