Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have written a very simple script like this:

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
        echo $f
        . $f
    for f in ~/src/trunk/Database/scripts/upgrades/current/*.sql
        echo $f
        FOUT=`basename "$f"`
        ISQL -i "$f" -o "$LOGDIR/$"


When I run it I got these error messages

~/bin/ line 48: ISQL: command not found

Why sh/bash will think ISQL is a command and not an alias. If I add 'alias' right after 'alias ISQL=...', I can see ISQL in the alias print out.

Crazy enough, the *sh files in the first for loop actually calls ISQL too. The ISQL is visible inside the *.sh files.

share|improve this question
Is this answered by…? In particular, do you need "shopt -s expand_aliases"? – fencepost Nov 11 '11 at 4:46
You do not have to use an alias for this. It is much clearer to just create a second function. – grawity Nov 11 '11 at 10:22
Cannot reproduce. Please provide a minimal test case that works on any computer. – Daniel Beck Nov 28 '11 at 20:13

If you must use alias ? Then it should probably be outside the script (globally as it where).

In any case its not necessary and actually wasteful. Just rub that word out and it should work as you expect.

BTW You could export it as a variable if you need it later on but within the same run.... (then sub shells would be able to "see" it.)

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

or perhaps more tidily

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

export ISQL

Not sure if thats your intention though.

If you only want it to be local to the function, then in bash you must say so:

local 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.
share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .