bash中的多个命令别名


133

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

gnome-screensaver 
gnome-screensaver-command --lock 

现在我已经添加

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

我的.bashrc但因为我锁我的工作站经常它会更容易只需要输入一个命令。

260

尝试:

alias lock='gnome-screensaver; gnome-screensaver-command --lock' 
在你的.bashrc

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

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

+5

不应该说是“功能锁定(){}嗒嗒” ? 14 1月. 102010-01-14 12:12:53

+7

我使用'sh'语法,它也适用于'bash'。 14 1月. 102010-01-14 13:54:55

+2

你如何通过论证?嵌套在'lock()'括号中的变量'msg'给出错误'语法错误附近的意外令牌msg'' .. 25 3月. 142014-03-25 14:57:54

+6

一旦定义了函数,它的行为就像一个命令:参数在命令行上,用空白。在声明部分,参数是函数体中的'$ 1','$ 2' ...。 25 3月. 142014-03-25 15:17:23

  0

感谢提到的多线功能 13 7月. 142014-07-13 07:58:30


11

这不行吗?

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

4

这将运行2个命令此起彼伏:

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

2

因此,使用分号:

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

如果你要提供这个论点不顺利到第一个命令。 或者,在$ HOME/bin目录中创建一个简单的脚本。


9

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

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

别名是仍然与原始名称相关联的名称。 ll只是一个稍微特殊的ls

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

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

从技术上讲,Bash shell语言中的别名在功能方面受限制很大,以至于他们极其不适合涉及多于单个命令的任何事情。用它们来做一个单一命令的小变化,仅此而已。

既然目的是创建一个执行它在内部将在其他命令解析操作的新命令,唯一正确的答案是使用此一功能:

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

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

  0

如果您可以提供任何示例与您的答案,这将是最好的。等待更新。 15 11月. 172017-11-15 14:40:00


56

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

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

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

+4

奇怪的是,用'git fetch && git pull origin master'尝试了这个功能,直到我用''替换'&&'后才开始工作。 25 2月. 142014-02-25 09:42:00

+3

可能是因为git fetch的确返回了0以外的东西? 12 2月. 152015-02-12 09:53:14

  0

帮助!在Xubuntu 16.04.3上为我工作 09 1月. 182018-01-09 12:16:54


0

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

你应该进入中声明你的别名同样的问题,你可以参考下面的链接来解决这个问题:

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