дочерний файл оболочки, использующий муравей, не возвращающийся в родительский файл оболочки - PullRequest
0 голосов
/ 05 октября 2018

Есть два файла.Один родительский файл, который вызывает дочерний файл оболочки.Дочерний файл оболочки использует ant и выполняет некоторую команду, этот дочерний файл выполняется правильно, но поток не возвращается к родительскому файлу.Если я закомментирую строку ant, поток возвращается к родительскому файлу.

    echo "Going to build the abc and log file is 
    $abc_log"
    call_ant
    antReturnCode=$?

    echo "ant  build complete and return code is:\""$antReturnCode"\""
    echo "BUILD SUCCESSFUL" > $abc_log
    if grep "BUILD SUCCESSFUL" < $abc_log ; then
            echo "LBaaS Shiphome Build successful"
            sed -i 's/ant_build : .*/ant_build : COMPLETED/g' 
           $sub_activity_file
    else
            echo "Issue building the abc"
            sed -i 's/ant_build : .*/ant_build : FAILED/g' 
            $sub_activity_file
            exit 1
    fi

     }
    call_ant(){
    ant -q

   }

OUTPUT: общее время: 12 минут 17 секунд, сборка муравья завершена и код возврата: «0» Двоичный файл (стандартный ввод) соответствует abc Построение выполнено успешно

Родительский файл:

   sh $dir/create_shiphome.sh $gen2_image_version | tee $abc_log
    echo "child script execution done!!"

Он выполняет "$ dir / create_shiphome.sh $ gen2_image_version | tee $ abc_log", правильно, но поток не возвращается обратноиз дочернего сценария.

1 Ответ

0 голосов
/ 05 октября 2018

Short: В оболочке функции должны быть определены перед их вызовом.Итак, переместите вашу call_ant функцию оболочки

call_ant() {
    ant -q
}

в верхнюю часть скрипта.

длиннее, и пример

Пусть, скажем, естьродительский сценарий с именем par с содержимым

for i in 1 2 3
do
    echo "par: calling sub with $i"
    ./sub $i
done

, поэтому есть дочерний сценарий с именем sub с содержимым

myecho() { echo "sub: got this: $@"; }
myecho "$1"

, на котором выполняется bash par, печатается:

par: calling sub with 1
sub: got this: 1
par: calling sub with 2
sub: got this: 2
par: calling sub with 3
sub: got this: 3

но если вы измените sub на:

myecho "$1"
myecho() { echo "got this: $@"; }

, вы получите:

par: calling sub with 1
./sub: line 2: myecho: command not found
par: calling sub with 2
./sub: line 2: myecho: command not found
par: calling sub with 3
./sub: line 2: myecho: command not found

и, конечно, когда вы закомментируете myecho в сабе

#myecho "$1"
myecho() { echo "sub: got this: $@"; }

будет печатать без ошибок

par: calling sub with 1
par: calling sub with 2
par: calling sub with 3

Ps:

В таких случаях обычно помогает запустить скрипт с bash -x script, чтобы увидетькак это выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...