多个命令在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