Как получить переменную bash изнутри postgres bash? - PullRequest
1 голос
/ 21 января 2020

Я новичок в сценариях bash и postgresql.

В другом вопросе я видел способ запуска сценария bash от имени psql пользователь здесь .

Я попытался сделать функцию bash следующим образом:

postgres_create_db(){
sudo su postgres <<- EOF
    if psql -lqt | cut -d \| -f 1 | grep -qw nokia_aaa_poc_db; then
        psql -c '\dt'
    else
        psql -c 'CREATE DATABASE nokia_AAA_poc_db;' 
    fi
EOF
exit
}

, где эта функция будет вызываться далее в коде, но мне интересно, могу ли я добавить RETURN к функции это фактически возвращает переменную, которая была впервые объявлена ​​внутри postgres bash (между EOF). Как показано ниже:

postgres_create_db(){
    sudo su postgres <<- EOF
        if psql -lqt | cut -d \| -f 1 | grep -qw nokia_aaa_poc_db; then
            psql -c '\dt'
            exists=1 #where thats a variable that I want to access outside the postgres bash.
        else
            psql -c 'CREATE DATABASE nokia_AAA_poc_db;' 
        fi
    EOF
    exit

    return exists
}

но выдает ошибку при проверке оболочки

return exists
               ^-- SC2152: Can only return 0-255. Other data should be written to stdout.

1 Ответ

2 голосов
/ 21 января 2020

Функции в bash могут возвращать значения только от 0 до 255, где 0 - успех. Ссылка: Возвращаемое значение в функции Bash

Таким образом, вместо этого вы можете отобразить переменную следующим образом:

#!/usr/bin/env bash

postgres_test() {
    psql -c '\dt' &> /dev/null
    declare exists=1
    echo $exists
}

printf "%s\n" "$(postgres_test)"

Это напечатает "1".
Вы также заметите, что я перенаправил вывод команды Postgres в / dev / null. Это связано с тем, что в противном случае она будет объединена в выводе функции.
Вы можете вместо этого перенаправить этот вывод в файл sh.

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