Is there a way to alias a multi-worded command in Unix?
The alias name is on the left hand side, so you can have any multiworded command in the right:
alias my_alias="multi worded command"
EDIT: However, if you really want to have aliases names of multiple words -- in your example, if you really want "sudo shutdown" to be the alias, you can work around this by using the following alias feature (in the bash manual):
A trailing space in value causes the next word to be checked for
alias substitution when the alias is expanded.
So, if you still want to use sudo
with other commands but not with shutdown
and if you can afford to alias shutdown
to something else, you can have:
alias sudo='sudo '
alias shutdown="echo nope"
Now, sudo anything_else
will work as expected (assuming you don't have an alias for anything_else
, but if you have it wouldn't have worked before either);
but sudo shutdown
will be equivalent to sudo echo nope
and it'll print that string.
Use a function:
foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }
To quote from: Bash: Spaces in alias name
The Bash documentation states "For almost every purpose, shell functions are preferred over aliases." Here is a shell function that replaces ls
and causes output to be piped to more
if the argument consists of (only) -la
.
ls() {
if [[ $@ == "-la" ]]; then
command ls -la | more
else
command ls "$@"
fi
}
As a one-liner:
ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }
Automatically pipe output:
ls -la