2020年9月19日土曜日

SAS9のプロセスから環境変数の設定を生成

何かのスクリプトを使うときに億劫に感じるのが設定です。で考えたのが動いているプロセスから主要なプロダクトのディレクトリを探す方法です。
#!/bin/sh

function variable() {
    TEMPLSIT=`mktemp --tmpdir=/var/tmp XXX.sh`

    while read var cmd depth
    do
        ps --no-headers --format cmd -C $cmd | \
        awk -vcmd=$cmd '{ for(i = 1; i <= NF; i++) { if (index($i, cmd) > 0) { print $i; exit} } }' | \
        awk -vd=$depth '{ n = split($1, a, "/"); for (i = 2; i < (n + d); i++) { printf("/%s", a[i]) } print ""; }' | \
        awk -vvar=$var '{ printf("export %s=%s\n", var, $1 ) }'
    done << _EOF_
SAS_HOME   sasauth           -4
SAS_CONFIG MetadataServer.sh -3
LSF_HOME   mbatchd           -3
PM_HOME    jfd               -3
RTM_HOME   lsfpollerd        -2
GMS_HOME   gabd              -1
_EOF_

    rm -f $TEMPLSIT
}

variable
実行すると環境変数の定義を生成します。
[root@dwtcjp conf]# sh variable.sh
export SAS_HOME=/SAS/SAS_HOME
export SAS_CONFIG=/SAS/SAS_CONFIG
export LSF_HOME=/SAS/LSF_HOME
export PM_HOME=/SAS/PM_HOME
export RTM_HOME=/SAS/RTM_HOME
export GMS_HOME=/SAS/LSF_HOME/gms