perl -F= -lane '$v{$F[0]}=$F[1]; if ($F[0] eq "DATE") {$v{CURRENT_VERSION} eq $v{NEW_VERSION} ? print $v{NEW_VERSION}, " ", $v{DATE} : exit(1)}'
Или, все еще острота, но читаемый
perl -F= -lane '
$v{$F[0]} = $F[1];
if ($F[0] eq "DATE") {
$v{CURRENT_VERSION} eq $v{NEW_VERSION}
? print $v{NEW_VERSION}, " ", $v{DATE}
: exit(1)
}' << END
CURRENT_VERSION=223.3.12.4.5.3
NEW_VERSION=223.3.12.4.5.3
DATE=17.3.2013
END
выводы
223.3.12.4.5.3 17.3.2013
Проблема в том, что прямой вызов делает сценарий имени названия команды, см.
cat /proc/$PID/comm
, что вызывает PGREP
, чтобы соответствовать. Если вы названо через Bash
, то имя команды - «Bash».
вместо этого используйте
pgrep --exact zeal
.
Длинный вариант --exact
, предложенный в ответе Hauke, не работает на некоторых системах. Вместо него можно использовать эквивалентный короткий вариант -x
.
#!/bin/bash
if pgrep -x "zeal" > /dev/null
then
echo "Running"
else
echo "Stopped"
fi