从当前目录安装Unix环境



我有一个SunOS系统,这使得情况从简单变得复杂。

我有一些从不同路径运行的脚本(不可避免),系统有一个路径结构,路径中有"系统环境",然后我可以从路径中提取。我有一个简单的脚本,它之前调用或从每个其他脚本来源,以获得环境和设置其他几个常见变量。问题是,现在有3个不同的区域可能调用这个脚本,它不能正确地从路径中提取环境。

下面是可能存在的3个路径的简单示例:

  • /dir1/dir2/$ {ENV}/bin/script1.ksh
  • /dir1/dir2/$ {ENV}/服务/service_name script2.ksh
  • /dir1/dir2/$ {ENV}/服务/service_name/日志/script3.ksh

我想有一个脚本,这将能够得到${ENV},不管哪一个路径被提供,而不是我目前的3个单独的策略。

下面是我目前如何获得第一个${ENV}:

#!/bin/ksh
export BASE_DIR=${0%/*/*}
export ENV=${BASE_DIR##*/}

脚本2:

#!/bin/ksh
export CURR_DIR=$( cd -- "$(dirname -- "$(command -v -- "$0")")" && pwd)
export BASE_DIR=${CURR_DIR%/*/*}
export ENV=${BASE_DIR##*/}

正如我所说的,这是一个SunOS系统,所以它有一个旧的限制版本的KSH。无set -A或替换

关于限制脚本重复的最佳策略有什么想法吗?

谢谢。

从您的示例中可以看出,您的${ENV}目录距离根目录的深度是固定的,在这种情况下,您可以轻松地从另一端开始获得目录的名称;

export ENV=`pwd | sed -e "s%(/dir1/dir2/)([^/]*).*%2%"`

我使用'%'所以我可以匹配'/'而不转义。在不知道您使用的是什么版本的SunOS/Solaris的情况下,我无法确定您的sed是否兼容,但是Bruce Barnett在他的教程中包含了它,它与后期的SunOS和早期的Solaris版本非常接近。

如果您的脚本都是由同一用户调用的,那么您可能希望在该用户的.profile中包含上述内容,那么该用户拥有/执行的所有脚本都可以访问ENV变量。

UPDATE: Lee E. McMahon的"SED——一个非交互式文本编辑器"——写于1978年——包括使用转义括号的模式分组,所以它应该在SunOS上工作。:)

相关内容

  • 没有找到相关文章

最新更新