bash别名中的多个命令

时间:2009-04-16 15:47:33

标签: bash configuration

我想定义一个连续运行以下两个命令的别名。

gnome-screensaver
gnome-screensaver-command --lock

现在我已添加

alias lock='gnome-screensaver-command --lock'

到我的.bashrc,但由于我经常锁定我的工作站,所以只输入一个命令会更容易。

12 个答案:

答案 0 :(得分:332)

尝试:

alias lock='gnome-screensaver; gnome-screensaver-command --lock'

lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}
你的.bashrc中的

第二种解决方案允许您使用参数。

答案 1 :(得分:65)

其他答案充分回答了这个问题,但是您的示例看起来像第二个命令取决于第一个成功退出的命令。您可能想在别名中尝试short-circuit evaluation

alias lock='gnome-screensaver && gnome-screensaver-command --lock'

现在除非第一个命令成功,否则甚至不会尝试第二个命令。在SO question中描述了对短路评估的更好描述。

答案 2 :(得分:14)

别名适用于别名命令名称。除此之外的任何事情都应该用功能完成。

alias ll='ls -l' # The ll command is an alias for ls -l

别名是仍与原始名称相关联的名称。 ll只是一种略微具体的ls

d() {
    if exists colordiff; then
        colordiff -ur "$@"
    elif exists diff; then
        diff -ur "$@"
    elif exists comm; then
        comm -3 "$1" "$2"
    fi | less
}

函数是具有内部逻辑的新命令。它不仅仅是对另一个命令的重命名。它做内部操作。

从技术上讲,Bash shell语言中的别名功能非常有限,以至于它们非常适合涉及单个命令的任何内容。使用它们来制作单个命令的小突变,仅此而已。

由于打算创建一个执行内部将在其他命令中解析的操作的新命令,唯一正确的答案是在这里使用一个函数:

lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

在这样的场景中使用别名会遇到很多问题。与作为命令执行的函数相反,别名被扩展为当前命令,这在将此别名“命令”与其他命令组合时将导致非常意外的问题。它们也不能用于脚本。

答案 3 :(得分:11)

这不起作用吗?

alias whatever='gnome-screensaver ; gnome-screensaver-command --lock'

答案 4 :(得分:4)

这将一个接一个地运行2个命令:

alias lock='gnome-screensaver ; gnome-screensaver-command --lock'

答案 5 :(得分:2)

所以使用分号:

alias lock='gnome-screensaver; gnome-screen-saver-command --lock'

如果要为第一个命令提供参数,这不能很好地工作。 或者,在$ HOME / bin目录中创建一个简单的脚本。

答案 6 :(得分:2)

将此功能添加到您的~/.bashrc并重新启动终端或运行source ~/.bashrc

function lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

这样,只要您在终端中输入lock,这两个命令就会运行。

在您的特定情况下,创建alias可能有效,但我不建议这样做。直观地,我们认为别名的值将与您在终端中输入的值相同。但是事实并非如此:

有关别名的定义和使用的规则有些 令人困惑。

对于几乎所有目的,shell函数优先于别名。

因此,除非必须使用别名,否则不要使用别名。 https://ss64.com/bash/alias.html

答案 7 :(得分:1)

我第二个@mouviciel方法。对于简单的命令,使用以下命令效果很好:

alias doSomething='command1; command2'

对于需要参数的命令,只需使用函数即可:

doSomething() {
    command1
    command2 --lock
}

答案 8 :(得分:0)

将我的2美分添加到11岁的讨论中,尝试以下方法:

alias lock="gnome-screensaver \gnome-screensaver-command --lock"

答案 9 :(得分:0)

在Windows中,Git\etc\bash.bashrc中 我使用(文件末尾)

a(){
    git add $1  
    git status
}

然后在git bash中简单地写

$ a Config/

答案 10 :(得分:0)

function lock() {
    gnome-screensaver
    gnome-screensaver-command --lock
}

以上在 bash 中对我来说完美地翻译为:

bottom() {
    clear
    printf '\n%.0s' {1..100}
}
alias c="bottom"

我想要做的就是清除屏幕 (c ) 并让 bash 提示出现在底部,而不是终端窗口的顶部。我很久以前就解决了这个问题(太久以前......忘记我做了什么),但现在我已经把这个函数放在 .bash_profile 中了,它开始比赛了!现在,我也在执行该函数,以便在我打开一个新术语时。窗口,提示,并且只有提示,出现在底部。非常感谢您的建议。我不确定我是想念这种东西还是想念它的报酬……可能两者都有。 :-)

答案 11 :(得分:-1)

在向~/.bashrc声明别名时遇到了问题。我的终端无法识别我在~/.bashrc中声明的别名。我从文章(附在底部)了解到Mac OS X默认运行login-shell因此它调用~/.bash_profile而不是~/.bashrc

如果您在声明别名时遇到同样的问题,可以参考以下链接来解决问题:

http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html