多个命令在bash的别名中

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

gnome-screensaver gnome-screensaver-command --lock 

现在我已经添加了

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

到我的.bashrc,但由于我经常locking我的工作站,只需键入一个命令会更容易。

尝试:

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

要么

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

在你的.bashrc中

第二个解决scheme允许你使用参数。

其他答案充分回答了这个问题,但你的例子看起来像第二个命令取决于第一个成功退出。 您可能需要尝试在别名中进行短路评估 :

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

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

这不行吗?

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

别名是用于别名命令的名称。 除此之外的任何事情都应该用function来完成。

 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语言中的别名在function上是如此有限,以至于它们不适用于涉及多个命令的任何事情。 用它们来做一个单一的命令的一个小的变化,只不过是。

由于意图是创build一个新的命令来执行一个内部将在其他命令中parsing的操作,唯一正确的答案是在这里使用一个函数:

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

在这种情况下使用别名会遇到很多问题。 与作为命令执行的函数相反,别名被扩展到当前命令中,当将这个别名“命令”与其他命令组合时,会导致非常意想不到的问题。 他们也不能用脚本工作。

这会一个接一个地运行这两个命令:

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

所以用一个分号:

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

如果您想为第一个命令提供参数,这不起作用。 或者,在$ HOME / bin目录中创build一个简单的脚本。

在将别名声明到~/.bashrc时,我遇到了一个问题。 我的terminal没有识别我在~/.bashrc声明的别名。 我从文章(附在底部)了解到,Mac OS X默认运行login-shell ,因此它调用~/.bash_profile而不是~/.bashrc

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

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