Answers:
尝试:
alias lock='gnome-screensaver; gnome-screensaver-command --lock'
要么
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
在你的.bashrc中
第二种解决方案允许您使用参数。
lock()
括号内嵌套变量“ msg” 会导致错误syntax error near unexpected token
msg'` ..
$1
,$2
...函数体。
其他答案可以充分回答问题,但是您的示例看起来像第二条命令取决于第一个命令是否成功退出。您可能想在别名中尝试短路评估:
alias lock='gnome-screensaver && gnome-screensaver-command --lock'
现在,除非第一个命令成功执行,否则将不再尝试第二个命令。在SO问题中对短路评估有一个更好的描述。
git fetch && git pull origin master
和我,直到我换成没有工作&&
用;
。
别名用于别名命令名称。除此之外,其他任何事情都应该通过函数来完成。
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
}
在这种情况下使用别名会遇到很多问题。与作为命令执行的功能相反,别名被扩展为当前命令,这在将该别名“命令”与其他命令结合使用时会导致非常意外的问题。它们也无法在脚本中使用。
gps() { git commit -m 'init '; git push; git status; }
如前所述,别名极为有限,易碎,其唯一目的是重命名命令。出于无关的目的滥用它们会使您陷入热水,就像您刚刚经历的那样。
将此功能添加到您的设备中,~/.bashrc
然后重新启动您的终端或运行source ~/.bashrc
function lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
这样,只要您lock
在终端中输入,这两个命令就会运行。
在您的特定情况下,创建一个alias
可能有效,但我不建议这样做。直观地,我们认为别名的值将与您在终端中输入的值相同。但是事实并非如此:
有关别名的定义和使用的规则有些混乱。
和
对于几乎所有目的,shell函数优先于别名。
因此,除非必须使用别名,否则不要使用别名。 https://ss64.com/bash/alias.html
将别名声明为时出现问题~/.bashrc
。我的终端无法识别我在中声明的别名~/.bashrc
。我从文章(位于底部)获悉,Mac OS X login-shell
默认运行,因此它调用~/.bash_profile
而不是~/.bashrc
。
如果在声明别名时遇到相同的问题,则可以参考以下链接来解决该问题:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
source .bashrc
在保存对文件的更改之后,我始终会执行操作,以允许在不注销的情况下识别别名。