У меня проблемы с моим скриптом CSH и командой:
set XVFBCHK2 = `pgre -f 'Xvfb' | wc -l`
Кажется, возвращаются противоречивые значения. Когда он должен вернуть 1, он возвращает 0. Я почти уверен, что функция grep слишком быстрая и, следовательно, не перехватывает новый экземпляр Xvfb после командной строки:
Xvfb :1 -screen 0 1600x1200x16 >& /dev/null &
Например, в этом сценарии CSH:
if ( $XVFBCHK == 0 && $FIJICHK == 0 ) then
set DISP=0
set SCREEN=0
Xvfb :1 -screen 0 1600x1200x16 >& /dev/null &
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
if ( $XVFBCHK2 == 1 ) then
set DISP=1
set SCREEN=0
else if ( $XVFBCHK2 == 0 ) then
Xvfb :2 -screen 0 1600x1200x16 >& /dev/null &
set DISP=2
set SCREEN=0
endif
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
if ( $XVFBCHK2 == 0 ) then
Xvfb :3 -screen 0 1600x1200x16 >& /dev/null &
set DISP=3
set SCREEN=0
endif
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
if ( $XVFBCHK2 == 0 ) then
Xvfb :4 -screen 0 1600x1200x16 >& /dev/null &
set DISP=4
set SCREEN=0
endif
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
if ( $XVFBCHK2 == 0 ) then
Xvfb :5 -screen 0 1600x1200x16 >& /dev/null &
set DISP=5
set SCREEN=0
endif
set XVFBCHK2 = `pgrep -f 'Xvfb' | wc -l`
echo $XVFBCHK2
setenv DISPLAY :$DISP.$SCREEN
elseif
echo $XVFBCHK2
echo $DISP
Я могу получить следующий вывод:
0
0
3
3
3
3
3
Таким образом, кажется, что Xvfb был выполнен три раза, но pgrep не перехватывал выполнения до третьего. Как убедиться, что он ловит с первой попытки или точно определяет, что первая попытка Xvfb:1 не удалась, и он должен попробовать Xvfb:2 затем?