我想定义一个连续运行以下两个命令的别名。
gnome-screensaver
gnome-screensaver-command --lock
现在我已添加
alias lock='gnome-screensaver-command --lock'
到我的.bashrc,但由于我经常锁定我的工作站,所以只输入一个命令会更容易。
答案 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
alias) 并让 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