У меня есть простой скрипт:
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) выглядит корректно для меня; Я думаю, что шаблон grep не делает то, что вы думаете. 'grep '\ * \ *'' будет соответствовать * любой * строке, потому что регулярное выражение '/ *' будет соответствовать нулю или более слэшам, а любая строка вообще будет содержать два экземпляра с нуля или более слэшей. –
@GordonDavisson: '/ *' будет соответствовать нольу или нескольким чертам, но '\ * \ *' будет соответствовать двум звездочкам, потому что они экранированы. – cdarke
Я получаю согласованный результат (как дочерний процесс или источник) в '$?' Из 1, если я эхо-результат, указанный в 'grep'. Но я запускаю 'bash', а не'/bin/shrc' (что бы это ни было). У вас есть что-то, установленное в файлах запуска, таких как '.bashrc', которые могут повлиять на него? – cdarke