3

I'm trying to write a script that will set up aliases for my bash shell, but I don't want to source it automatically in .bashrc - I need to have the aliases in a subset of my terminals.

Is it possible to alias a command in a script and have the aliased command work for the shell the script was run from?

Desired functionality:

$ alias
# ... no output here
$ ./my-script
$ alias
alias foo='bar'
alias alpha='beta'
...
stickmangumby
  • 526
  • 2
  • 5
  • 11

3 Answers3

6

Aliases are private to the shells that they're created in. They can neither be exported, nor can they be accessed from a parent shell.

The easiest solution is to break the aliases out into a separate file, as you suggest, then either source that file by hand, or add a function to your .bashrc, that will source them when invoked.

function extra-aliases {
     . /path/to/file/containing/additional/aliases
}
Patrick
  • 101
  • 2
  • Love it! Yeah, I'm keen to skip the `source /path/to/alias-file` and just have a single command - this will do the job. Thanks! – stickmangumby Dec 09 '10 at 10:34
2

No. Aliases are private to the shell and subshells.

Ignacio Vazquez-Abrams
  • 45,939
  • 6
  • 79
  • 84
1

No.

But to provide a 'solution', though I don't know if it's what you'd want.

Try:

# alias
... nothing
# . ./myscript.sh
# alias
alias ls='ls -laR'

Note the . before ./myscript.sh. This is source.

Or why not make an alias out of it (in .bashrc):

alias mkalias="alias ls='ls -laR'; alias ll='ls -l'"
womble
  • 96,255
  • 29
  • 175
  • 230
jgr
  • 164
  • 4