1

Я написал очень простой скрипт, как это:

function apply_to_dev {
    echo "Applying scripts to DEV..."
    alias ISQL="isql -Uuser -Ppwd -SDEV -DDATA -I ~/bin/interfaces"
    shopt -s nullglob
    for f in ~/src/trunk/Database/scripts/upgrades/current/*.sh
    do
        echo $f
        . $f
    done
    for f in ~/src/trunk/Database/scripts/upgrades/current/*.sql
    do
        echo $f
        FOUT=`basename "$f"`
        ISQL -i "$f" -o "$LOGDIR/$FOUT.dev.out"
    done
}

apply_to_dev

Когда я запускаю его, я получаю эти сообщения об ошибках

~/src/trunk/Database/scripts/upgrades/current/JIRA-0192.sql
~/bin/RunSQL.sh: line 48: ISQL: command not found

Почему sh/bash будет думать, что ISQL - это команда, а не псевдоним. Если я добавлю псевдоним сразу после псевдоним ISQL = ...', Я вижу ISQL в распечатке псевдонима.

Как ни странно, файлы * sh в первом цикле for тоже на самом деле вызывают ISQL. ISQL виден внутри файлов * .sh.

1 ответ1

1

Если вы должны использовать псевдоним? Тогда это, вероятно, должно быть за пределами сценария (глобально, как это где).

В любом случае это не нужно и фактически расточительно. Просто протрите это слово, и оно должно работать так, как вы ожидаете.

Кстати, вы можете экспортировать его как переменную, если вам это понадобится позже, но в течение того же запуска .... (тогда субоболочки смогут "увидеть" это.)

export ISQL = "isql -Uuser -Ppwd -SDEV -DDATA -I ~/bin/interfaces"

или, может быть, более аккуратно

ISQL = "isql -Uuser -Ppwd -SDEV -DDATA -I ~/bin/interfaces"

экспорт ISQL

Не уверен, если это ваше намерение, хотя.

Если вы хотите, чтобы он был локальным для функции, то в bash вы должны сказать так:

локальный ISQL = "isql -Uuser -Ppwd -SDEV -DDATA -I ~/bin/interfaces"

$ help local

local: local [option] name[=value] ...
    Define local variables.

    Create a local variable called NAME, and give it VALUE.  OPTION can
    be any option accepted by `declare'.

    Local variables can only be used within a function; they are visible
    only to the function where they are defined and its children.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .