有没有一种方法可以在Unix中给多字命令起别名?


11

我正在尝试为命令添加别名,sudo shutdown但是我.profile不能这样做alias "sudo shutdown"="my command"。在Unix中还有另一种别名多字命令的方法吗?


我尝试了所有这些技巧,它们都起作用了!谢谢大家!
agentbanks217 2011年

在我的编辑中也尝试解决方案,因为我意识到您确实打算将'sudo shutdown'作为别名来得太晚了。

Answers:


19

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

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与其他命令一起使用,但又不想与其他命令一起使用,shutdown并且如果您可以承受shutdown其他别名,则可以使用:

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

现在,sudo anything_else它将按预期工作(假设您没有的别名anything_else,但如果拥有别名,则以前也不会工作);但sudo shutdown将等同于sudo echo nope并打印该字符串。


2
谢谢,低估了答案;我一直在使用alias cd="cd "单字母别名alias X="<directory-with-long-name>"来更轻松地从一个地方跳到另一个地方。
路加·戴维斯

同意,这实际上是超级有用的。我MIS型git的命令,这解决了我:alias gti="git "alias lgo="log"
BananaNeil

4

使用功能:

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

您可能想要一个else案例,以便在第二个参数不是 的情况下运行原始命令barfoo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
davidg

2

引用:Bash:别名中的空格

击文档状态“对于几乎所有目的,壳功能优于别名”。这是一个shell函数,如果参数由(only)组成,它将替换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


1

我更喜欢将可执行文件放到/ usr / local / bin中(确保在您的路径中),然后包含我要运行的命令。脚本的名称将是出现的命令。确保使用chmod + x / usr / local / bin / your_script。

因此该脚本可以称为“关机”

文件关闭的内容为:

#!/bin/sh
sudo shutdown

这打开了一个全新的世界。然后,您可以使用几个命令甚至一个脚本:

#!/usr/bin/env python
print "hi"
# more stuff. ....
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.