URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10087
[ Назад ]

Исходное сообщение
"Результат команды bash из шел != из скрипта."

Отправлено DiJey , 25-Мрт-16 16:45 
Результат выполнения команды из командной строки розница с результатом из скрипта, кто нибудь может  объяснить причину?  (шел один и тот же /bin/bash)

Скрипт:
-bash-3.00# cat ./audit_send.sh
#!/bin/bash
ps -ef | grep audit_send.sh | grep -v grep | wc -l
if (( $(ps -ef | grep audit_send.sh | grep -v grep | wc -l) > 1 )); then echo exit 1; exit 1; else echo not_exit; fi

Результат команды из командной строки:
-bash-3.00# if (( $(ps -ef | grep audit_send.sh | grep -v grep | wc -l) > 1 )); then echo exit 1; exit 1; else echo not_exit; fi
not_exit

Результат скрипта:
-bash-3.00# ./audit_send.sh
       1
exit 1
-bash-3.00#


Содержание

Сообщения в этом обсуждении
"Результат команды bash из шел != из скрипта."
Отправлено Аноним , 25-Мрт-16 18:29 
>[оверквотинг удален]
> Результат команды из командной строки:
> -bash-3.00# if (( $(ps -ef | grep audit_send.sh | grep -v grep
> | wc -l) > 1 )); then echo exit 1; exit
> 1; else echo not_exit; fi
> not_exit
> Результат скрипта:
> -bash-3.00# ./audit_send.sh
>        1
> exit 1
> -bash-3.00#

А ничего, что сама суть этого куска -- проверить, или скрипт с именем audit_send.sh запущен?
Соответственно, если запускать эту команду не этим скриптом, а напрямую, то скрипт запущен не будет.


"Результат команды bash из шел != из скрипта."
Отправлено SayKhan , 27-Мрт-16 13:12 
>[оверквотинг удален]
> Результат команды из командной строки:
> -bash-3.00# if (( $(ps -ef | grep audit_send.sh | grep -v grep
> | wc -l) > 1 )); then echo exit 1; exit
> 1; else echo not_exit; fi
> not_exit
> Результат скрипта:
> -bash-3.00# ./audit_send.sh
>        1
> exit 1
> -bash-3.00#

В скрипте у тебя выполняются две команды, а из командной строки ты запускаешь всего одну.


"Результат команды bash из шел != из скрипта."
Отправлено DiJey , 28-Мрт-16 08:55 
>>[оверквотинг удален]
> В скрипте у тебя выполняются две команды, а из командной строки ты
> запускаешь всего одну.

-bash-3.00# cat audit_send.sh
#!/bin/bash
#ps -ef | grep audit_send.sh | grep -v grep | wc -l
if (( `ps -ef | grep audit_send.sh | grep -v grep | wc -l` > 1 )); then echo exit 1; exit 1; else echo not_exit; fi

-bash-3.00# ./audit_send.sh
exit 1


"Результат команды bash из шел != из скрипта."
Отправлено DiJey , 28-Мрт-16 09:04 
еще интересное наблюдение (что за фигня шелл то один использую):

-bash-3.00# env | grep sh
SHELL=/usr/bin/bash
-bash-3.00# cat audit_send.sh
#!/usr/bin/bash
#ps -ef | grep audit_send.sh | grep -v grep | wc -l
if (( `ps -ef | grep audit_send.sh | grep -v grep | wc -l` > 1 )); then echo exit 1; exit 1; else echo not_exit; fi

-bash-3.00# ./audit_send.sh
exit 1
-bash-3.00# cat audit_send.sh
#ps -ef | grep audit_send.sh | grep -v grep | wc -l
if (( `ps -ef | grep audit_send.sh | grep -v grep | wc -l` > 1 )); then echo exit 1; exit 1; else echo not_exit; fi

-bash-3.00# ./audit_send.sh
not_exit
-bash-3.00# env
TERM=xterm
SHELL=/usr/bin/bash
SSH_CLIENT=192.168.37.92 49765 22
SSH_TTY=/dev/pts/5
USER=root
MAIL=/var/mail//root
PATH=/usr/sbin:/usr/bin
PWD=/root
LANG=C
TZ=<GMT+3>+3
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.22.22 49765 10.193.0.22 22
_=/usr/bin/env
-bash-3.00#



"Результат команды bash из шел != из скрипта."
Отправлено vodz , 28-Мрт-16 14:51 
> Результат выполнения команды из командной строки розница с результатом из скрипта, кто
> нибудь может  объяснить причину?  (шел один и тот же /bin/bash)

Вы проверяете наличие выполнения скрипта из него же, при вызове из командной строки вы не не запускаете этот скрипт.


"Результат команды bash из шел != из скрипта."
Отправлено DiJey , 29-Мрт-16 12:06 
> Вы проверяете наличие выполнения скрипта из него же, при вызове из командной
> строки вы не не запускаете этот скрипт.

Когда я запускаю из командной строки он уже запущен, т.е. не имеет значения из командной строки запускаю или нет. Рабочий вариант скрипта создал.
Теперь возникает вопрос какого ... при проверке из скрипта ps -ом он показывает что их аж 2 шт. а при запуске из крона аж 3. Изменение скрипта с корректировкой внутри скрипта количества audit_send.sh не меняет количество предзапущенных скриптов при проверке командой: ps -ef | grep audit_send.sh | grep -v grep | wc -l


Скорректировал скрипт нижеследующим образом:
#!/bin/bash
#date
if  [ ! -e ./pid ]; then mkdir ./pid; fi
if  [ ! -f ./pid/audit_send.pid ]; then echo $$ > ./pid/audit_send.pid; fi
#nm=`ps -ef | grep audit_send.sh | grep -v grep | wc | awk {'print $1'}`
#echo $nm
#ps -ef | grep audit_send.sh | grep -v grep

if [ `ps -ef | grep "$0" | grep -v grep | wc -l` -gt 3 ]; then exit 1; fi

while [ -f ./pid/audit_send.pid ]
do
sleep 1
done &


"Результат команды bash из шел != из скрипта."
Отправлено DiJey , 29-Мрт-16 12:25 
> Теперь возникает вопрос какого ... при проверке из скрипта ps -ом он
> показывает что их аж 2 шт. а при запуске из крона
> аж 3. Изменение скрипта с корректировкой внутри скрипта количества audit_send.sh не
> меняет количество предзапущенных скриптов при проверке командой: ps -ef | grep
> audit_send.sh | grep -v grep | wc -l

точнее не такой командой: ps -ef | grep audit_send.sh | grep -v grep | wc -l
она может 1 показать, я из за этого не мог понять какое то время какое условие выставлять нужно в if, а хорошо показывает связка что audit_send.sh 2шт если  запускать в скрипте:

nm=`ps -ef | grep audit_send.sh | grep -v grep | wc | awk {'print $1'}`
echo $nm

Я стал так проверять вспомнив, что линуксовые конструкции типа:
for i in "parametr1 oarametr2 parametretc"; do ; done
в Соляре не работают.


"Результат команды bash из шел != из скрипта."
Отправлено Andrey Mitrofanov , 29-Мрт-16 14:28 
> показывает что их аж 2 шт. а при запуске из крона
> аж 3.

А в военное время значение Пи может достигать 4 !


"Результат команды bash из шел != из скрипта."
Отправлено fantom , 19-Апр-16 09:45 
>> показывает что их аж 2 шт. а при запуске из крона
>> аж 3.
> А в военное время значение Пи может достигать 4 !

ПРОГРАММИСТЫ! ПОМИТЕ! Комп выполняет в точности то, что вы НАПИСАЛИ, а не то, чего вам от него ХОТЕЛОСЬ!