Я создаю маленький сценарий удара для Вас:
#!/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"
Хорошо, проблема просто в том, что PATH как есть, все еще действителен для вложенных оболочек, т.е. мы не должны повторно оценивать переменную PATH, т.е. не включать ее в .bashrc | .zshrc
, но поместите это в .profile | .zprofile
. Конфигурации профиля запускаются один раз для каждой оболочки входа. В этом контексте вы можете рассматривать конфигурации профиля как начальную конфигурацию.
Вы можете довольно легко проверить, находится ли этот каталог уже в 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"