在 Unix 中有没有办法给多词命令添加别名?

在 Unix 中有没有办法给多词命令添加别名?

我正在尝试为命令添加别名sudo shutdown,但在我的系统中.profile我不能只执行alias "sudo shutdown"="my command"。在 Unix 中还有其他方法可以为多词命令添加别名吗?

答案1

别名位于左侧,因此您可以在右侧使用任何多词命令:

alias my_alias="multi worded command"

编辑:但是,如果您确实想要多个单词的别名 - 在您的示例中,如果您确实希望“sudo shutdown”作为别名,您可以使用以下别名功能(在 bash 手册中)来解决这个问题:

A trailing space in  value causes the next word to be checked for
alias substitution when the alias is expanded.

因此,如果您仍想使用sudo其他命令但不想使用 with shutdown,并且可以使用shutdown其他命令的别名,那么您可以:

alias sudo='sudo '
alias shutdown="echo nope"

现在,sudo anything_else将按预期工作(假设您没有的别名anything_else,但如果有,它之前也不会起作用);但sudo shutdown将相当于并且sudo echo nope它将打印该字符串。

答案2

使用函数:

foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }

答案3

引自:Bash:别名中的空格

Bash 文档指出“对于几乎所有用途,shell 函数都比别名更受欢迎。”这是一个 shell 函数,如果参数仅包含 ,它将替换ls并导致输出通过管道传输到。more-la

ls() {
    if [[ $@ == "-la" ]]; then
        command ls -la | more
    else
        command ls "$@"
    fi
}

作为一行代码:

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

自动管道输出:

ls -la

答案4

您可以使用破折号作为解决方法:alias sudo-shutdown="your command"

相关内容