sh 别名:未找到命令

sh 别名:未找到命令

我写了一个非常简单的脚本,如下所示:

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 是命令而不是别名。如果我在“alias ISQL=...”后面添加“alias”,我可以在别名打印输出中看到 ISQL。

疯狂的是,第一个 for 循环中的 *sh 文件实际上也调用了 ISQL。ISQL 在 *.sh 文件中可见。

答案1

如果必须使用别名?那么它可能应该在脚本之外(全局)。

无论如何,这都不是必要的,而且实际上很浪费。只需删除该词,它就会按预期工作。

顺便说一句,如果您稍后需要它,但在同一运行中,您可以将其作为变量导出......(然后子 shell 将能够“看到”它。)

导出 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"

$ 帮助本地

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.

相关内容