2016-04-09 6 views
-2

У меня есть простой скрипт:

greptest 
------------ 
#!/bin/bash 
. /opt/apps/algo/alcr5/TOP/shrc 
$RTCE_HOME/bin/utils/serverlist.sh|grep Ugli|grep '\*\*' >/dev/null 2>&1 
echo $? 

выход

$RTCE_HOME/bin/utils/serverlist.sh|grep Ugli 

является:

Ugli 1   pid 28410 : 625060  00:46  86 

так скрипт greptest должен напечатать 1. но он печатает 0.

Теперь, если я выдаю команду:

source /opt/apps/algo/alcr5/TOP/shrc 

Выход правильный./opt/apps/algo/alcr5/TOP/shrc - это скрипт, который определяет некоторые переменные и функции.

При поиске файла shrc не возникает ошибки. что это может повлиять на $? значение следующей команды?

+0

Результат ('$?' Равен 0) выглядит корректно для меня; Я думаю, что шаблон grep не делает то, что вы думаете. 'grep '\ * \ *'' будет соответствовать * любой * строке, потому что регулярное выражение '/ *' будет соответствовать нулю или более слэшам, а любая строка вообще будет содержать два экземпляра с нуля или более слэшей. –

+1

@GordonDavisson: '/ *' будет соответствовать нольу или нескольким чертам, но '\ * \ *' будет соответствовать двум звездочкам, потому что они экранированы. – cdarke

+0

Я получаю согласованный результат (как дочерний процесс или источник) в '$?' Из 1, если я эхо-результат, указанный в 'grep'. Но я запускаю 'bash', а не'/bin/shrc' (что бы это ни было). У вас есть что-то, установленное в файлах запуска, таких как '.bashrc', которые могут повлиять на него? – cdarke

ответ

-2

Используйте #!/bin/bash вместо #!/bin/shrc, если вы используете bash.

+0

Это была опечатка. Я использую интерпретатор #!/Bin/bash. – AlexL