setmask
была командой, доступной в UNOS (с 1980 года).
С более давних пор команда umask
предоставляет аналогичные возможности.
Вызовите:
umask -S
, чтобы получить инвертированную маску в виде символьного режима chmod.
umask u=rwx,g=rx,o=rx
для получения эквивалента uask 022
.
Таким образом, ваше желание уже реализовано.
спасибо всем за участие и комментарии. Один дополнительный элемент ввода, который я не упомянул, — это префикс, который разделяет типы процессов, поэтому они не просто «BOX». Пример ввода ps
BOX.CC_Container_Philips1_Primary_X1
BOX.CC_Container_Philips_Primary_X1
BOX.CC_Container_Philips3_Primary_X1
BOX.Container_Server1_X1
BOX.Container_Node1_X1
BOX.Container_Host1_X1
BOX.Container_ClockService1_X1
BOX.Container_ClockService2_X1
так что в итоге я написал условное выражение, основанное на типе (это "CC" или нет? ), а затем запустить отдельные циклы. Может быть, это не лучший метод, но он работает.
#name = list of process names from SQL, parsed into an array
type=$(echo "${name}" | awk -F"_" '{print $1}')
if [[ "${type}" == "CC" ]]; then
while read -r line
do
running+=("${line}")
done < <(ps -u esmadmin -f | grep "${DOMAIN}.${name}_" | grep -v grep)
else
while read -r line
do
running+=("${line}")
done < <(ps -u esmadmin -f | grep "${DOMAIN}.${name}" | grep -v grep)
fi
Идея состоит в том, чтобы построить шаблон grep
, который более точно соответствует тому, что вы хотите. Помните, что .
соответствует любому символу.
Так, например, BOX.Container_${name}_
становится полезным шаблоном. Теперь Philips
отличается от Philips1
. Где вы хотите объединить записи, вы можете искать ClockService.
; который объединит ClockService1
и ClockService2
.
Мы также можем упростить некоторые тесты с помощью grep -c
и использовать [B]OX
, чтобы избежать требования grep -v
.
Итоговый код выглядит примерно так:
declare -A procs=(
[Philips]=1
[Node.]=1
[Host.]=1
[Server.]=1
[Philips1]=1
[Philips3]=1
[ClockService.]=2)
# psout=$(ps -u user -f)
psout=$(cat psout)
for i in "${!procs[@]}"
do
name=$i
configured_count=${procs[$i]}
running=$(echo "$psout" | grep -c "[B]OX.Container_${name}_")
if [[ "$configured_count" -gt "$running" ]]; then
result+=$(echo -e "\n[FAIL] ${name} - configured count: ${configured_count} running count: $running")
elif [[ "$running" -gt "$configured_count" ]]; then
result+=$(echo -e "\n[WARN] ${name} - configured count: ${configured_count} running count: $running")
else
result+=$(echo -e "\n[PASS] ${name} - configured count: ${configured_count} running count: $running")
fi
done
echo "$result"
В этом примере я cat
проверяю файл, а не вызываю ps
, но вы можете увидеть, как это изменить.
% cat psout
BOX.Container_Philips1_Primary_X1
BOX.Container_Philips_Primary_X1
BOX.Container_Philips3_Primary_X1
BOX.Container_Server1_X1
BOX.Container_Node1_X1
BOX.Container_Host1_X1
BOX.Container_ClockService1_X1
BOX.Container_ClockService2_X1
% bash code
[PASS] Node. - configured count: 1 running count: 1
[PASS] ClockService. - configured count: 2 running count: 2
[PASS] Philips1 - configured count: 1 running count: 1
[PASS] Philips3 - configured count: 1 running count: 1
[PASS] Server. - configured count: 1 running count: 1
[PASS] Philips - configured count: 1 running count: 1
[PASS] Host. - configured count: 1 running count: 1