sh alias: comando não encontrado

1

Eu escrevi um script muito simples como este:

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

Quando eu executo, recebo essas mensagens de erro

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

Por que o sh / bash pensa que o ISQL é um comando e não um alias. Se eu adicionar 'alias' logo após 'alias ISQL = ...', eu posso ver o ISQL na impressão do alias.

Loucos o suficiente, os arquivos * sh no primeiro loop for realmente chamam ISQL também. O ISQL é visível dentro dos arquivos * .sh.

    
por Anthony Kong 11.11.2011 / 04:36

1 resposta

1

Se você precisar usar um alias? Então, provavelmente deveria estar fora do script (globalmente como no local).

Em qualquer caso, não é necessário e realmente um desperdício. Apenas esfregue essa palavra e ela deve funcionar conforme o esperado.

BTW Você pode exportá-lo como uma variável se precisar mais tarde, mas dentro da mesma execução .... (então sub shells seria capaz de "ver").

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

ou talvez mais ordenadamente

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

export ISQL

Não tenho certeza se isso é sua intenção.

Se você quer que seja apenas local para a função, então no bash você deve dizer:

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

$ ajuda 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.
    
por 05.04.2012 / 19:44

Tags