在运行用户要运行的命令之前,请运行另一个命令


9

假设我想通过ls这种方式修改工具的原始行为:

$ ls
Hello World
file1 file2 ...

我怎样才能做到这一点?

运行时,ls我想运行另一个命令echo "Hello World!"

我看到的快速解决方案是使用别名:

alias orig_ls="ls"
alias ls='echo "Hello World!"'

但是,这不是一个真正的解决方案,因为在我运行orig_ls时它将输出"Hello World!"


在用户自己的路径中放置另一个ls,并使用它来挂钩原始路径。
peterh-恢复莫妮卡2015年

Answers:


12

有时,别名的功能不足以轻松完成所需的操作,因此这是一种无需使用别名的方法。

在启动外壳程序时获取的某些文件中(例如.bashrc),添加以下功能:

ls () {
    echo "Hello world!"
    command ls "$@"
}

与别名不同,函数可以递归。这就是为什么command ls使用而不是ls; 它告诉您的Shell使用实际的ls而不是您刚定义的函数。


2
确实。该解决方案扩展性更好。+1
PythonNut 2015年

commandOS X 的替代品是什么?
尼卡比曹

@IonicăBizău我不知道command没有用:/我不知道,也没有Mac可以测试它,对不起。
undergroundmonorail

9

您一定不要忘记致电ls

alias ls='echo "Hello World!"; ls'

哈!我以为这会创造一个无限的循环!但是为什么不创建一个无限循环呢?
尼卡比曹

1
您可以改用别名ls'echo“ Hello World!”; / usr / bin /
ls'– jamesqf

5
@IonicăBizău任何给定的“别名扩展规则”仅使用一次。
David Z

将两个与&一起使用也可以吗?这样还可以确保仅在自定义命令有效的情况下才运行用户的命令,对吗?
基金莫妮卡的诉讼

@QPaysTaxes &确实可以使用,但是我不能从中得出论点。
Hauke Laging
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.