我的里面有这些别名~/.bashrc
alias grep='grep --color=auto -H'
alias fgrep='fgrep --color=auto -H'
alias egrep='egrep --color=auto -H'
但当我运行时它们没有任何效果find ... -exec grep ...
,并且我总是必须手动提供这些选项。
有没有办法告诉选项参数find
中依赖别名?-exec
我正在考虑配置文件,而不是其他别名。
会不会在某种程度上不安全?
答案1
您不能使用这样的别名。别名仅在长命令序列中首先使用时才起作用,shell 基本上用实际命令替换别名文本。当您输入命令时,shell 首先搜索别名,然后搜索函数,依此类推。如果您在命令序列中间使用别名,则命令替换/别名替换不起作用。
此外, ,-exec
标志find
将始终生成一个执行二进制文件的单独进程,既不是别名,也不是硬编码的函数。
答案2
某些 shell 允许在命令行中的任何位置扩展别名 - 例如,zsh
具有 a 的概念全局别名,alias -g 'grep=grep --color=auto -H'
但是,如果您的交互式 shell 是 bash,那么别名只有在作为命令的第一个单词出现时才会展开,因此您需要将调用包装grep
在 shell 中,并以导致读取文件的方式调用 shell ~/.bashrc
,就像在交互式 shell 会话中一样。
例如
find . -name '*.txt' -exec bash -ic 'for f do grep foo "$f"; done' find-bash {} +
AFAIK 它在任何方面都不是不安全的 - 但是它有一些开销并且并不比直接向 grep 提供所需的选项更方便。