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'

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
| improve this answer | |
  • 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 9 '10 at 10:34

No. Aliases are private to the shell and subshells.

| improve this answer | |


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


# 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'"
| improve this answer | |
  • Thanks for the ideas, I hadn't thought of the second option. I like it! – stickmangumby Dec 9 '10 at 10:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.