【问题标题】:Setup Unix Environment from Current Directory从当前目录设置 Unix 环境
【发布时间】:2014-07-11 15:57:10
【问题描述】:

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

我有一些从不同路径运行的脚本(不可避免),并且系统有一个路径结构,路径中包含“系统环境”,然后我可以从路径中提取它。我有一个简单的脚本,它在之前调用或从其他所有脚本获取,以获取环境并设置其他几个公共变量。问题是,现在有 3 个不同的区域可能正在调用这个脚本,它不能正确地从路径中提取环境。

以下是可能存在的 3 条路径的简单示例:

  • /dir1/dir2/${ENV}/bin/script1.ksh
  • /dir1/dir2/${ENV}/services/service_name/script2.ksh
  • /dir1/dir2/${ENV}/services/service_name/log/script3.ksh

我想要 1 个能够获得 ${ENV} 的脚本,无论提供了哪一个路径,而不是我当前的 3 个单独路径的策略。

这是我目前获得第一个 ${ENV} 的方式:

#!/bin/ksh

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

第二个脚本:

#!/bin/ksh

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

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

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

谢谢。

【问题讨论】:

    标签: unix solaris ksh sunos


    【解决方案1】:

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

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

    我正在使用 '%' 所以我可以匹配 '/' 而不会转义。在不知道您使用的是哪个版本的 SunOS/Solaris 的情况下,我无法确定您的 sed 是否符合要求,但 Bruce Barnett 将其包含在 his tutorials 中,这与 SunOS 后期和早期 Solaris 版本非常接近。

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

    更新:Lee E. McMahon 的"SED -- A Non-Interactive Text Editor" - 写于 1978 年 - 包括使用转义括号的模式分组,因此它应该适用于 SunOS。 :)

    【讨论】:

      猜你喜欢
      • 2017-12-11
      • 1970-01-01
      • 2014-04-16
      • 1970-01-01
      • 2018-09-29
      • 2015-09-19
      • 2010-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多