лучшая практика для переменной установки PATH во вложенном пользовательском ENV

Я создаю маленький сценарий удара для Вас:

#!/bin/bash

COUNT_FILE="/tmp/count"
TIME_FILE="/tmp/time"
MAX_SEND=1             #max message
TIME_INT=300            #time interval in second


send () {
        ERROR_TYPE="_$1"
        MESSAGE=$2
        [ -e ${TIME_FILE}${ERROR_TYPE} ] || touch ${TIME_FILE}${ERROR_TYPE}
        [ -e ${COUNT_FILE}${ERROR_TYPE} ] || echo 0 > ${COUNT_FILE}${ERROR_TYPE}
        if [ $(( $(date +%s) - $(date +%s -r ${TIME_FILE}${ERROR_TYPE}) )) -gt $TIME_INT ];
        then
                COUNT=0
                touch ${TIME_FILE}${ERROR_TYPE}
        else
                COUNT=`cat ${COUNT_FILE}${ERROR_TYPE}`
        fi
        if [ $COUNT -lt $MAX_SEND ];
        then
                echo "$MESSAGE";
                #real send message
        fi
        COUNT=$(($COUNT+1))
        echo $COUNT > "${COUNT_FILE}${ERROR_TYPE}"
}

send "check_dns" "message"
0
задан 11 December 2013 в 12:56
2 ответа

Хорошо, проблема просто в том, что PATH как есть, все еще действителен для вложенных оболочек, т.е. мы не должны повторно оценивать переменную PATH, т.е. не включать ее в .bashrc | .zshrc , но поместите это в .profile | .zprofile . Конфигурации профиля запускаются один раз для каждой оболочки входа. В этом контексте вы можете рассматривать конфигурации профиля как начальную конфигурацию.

0
ответ дан 4 December 2019 в 17:52

Вы можете довольно легко проверить, находится ли этот каталог уже в PATH:

for dir in app1/bin app2/bin; do
    if [[ :"$PATH": != *:"$dir":* ]]; then
        PATH="$dir:$PATH"
    fi
done

Он ищет разделенный двоеточиями каталог в вашем PATH. Обратите внимание, что звездочки должны быть вне кавычек, как показано.

Другой способ записи:

[[ :"$PATH": != *:app1/bin:* ]] && PATH="app1/bin:$PATH"
[[ :"$PATH": != *:app2/bin:* ]] && PATH="app2/bin:$PATH"
1
ответ дан 4 December 2019 в 17:52

Теги

Похожие вопросы