如何在 Bash 中创建一个实际扩展另一个同名别名的别名?
为什么:
我以前也GREP_OPTIONS
设定.bashrc
到这样的事情:
GREP_OPTIONS="-I --exclude=\*~"
Run Code Online (Sandbox Code Playgroud)
我还有一个脚本(让我们说,setup-java.sh
),我会在处理一些 Java 项目之前调用它。它将包含以下行:
GREP_OPTIONS="$GREP_OPTIONS --exclude-dir=classes"
Run Code Online (Sandbox Code Playgroud)
如果我也使用 Sass,那么我会调用setup-sass.sh
其中包含以下行:
GREP_OPTIONS="$GREP_OPTIONS --exclude-dir=\*/.sass-cache"
Run Code Online (Sandbox Code Playgroud)
但GREP_OPTIONS
已弃用,显然标准解决方案是创建别名或某些脚本...
bra*_*zzi 14
Bash 将别名的值存储在一个名为 的数组中
BASH_ALIASES
:
$ alias foo=bar
$ echo ${BASH_ALIASES[foo]}
bar
Run Code Online (Sandbox Code Playgroud)
通过参数扩展, 我们可以获得最后一组别名(如果存在)或默认值:
alias grep="${BASH_ALIASES[grep]:-grep} -I --exclude=\*~"
Run Code Online (Sandbox Code Playgroud)
现在只需这样做setup-java.sh
:
alias grep="${BASH_ALIASES[grep]:-grep} -I --exclude=\*~ --exclude-dir=classes"
Run Code Online (Sandbox Code Playgroud)
...最后是setup-sass.sh
:
alias grep="${BASH_ALIASES[grep]:-grep} -I --exclude=\*~ --exclude-dir=\*/.sass-cache"
Run Code Online (Sandbox Code Playgroud)
如果调用了三行,我们得到了我们想要的:
$ echo ${BASH_ALIASES[grep]:-grep}
grep -I --exclude=\*~ -I --exclude=\*~ --exclude-dir=classes -I --exclude=\*~ --exclude-dir=\*/.sass-cache
Run Code Online (Sandbox Code Playgroud)
mik*_*erv 13
aliases
如果以空格结尾,则链接。
alias print='printf %s\\n ' hey='"hello, fine fellow" '
print hey
Run Code Online (Sandbox Code Playgroud)
hello, fine fellow
Run Code Online (Sandbox Code Playgroud)
如果您足够疯狂,您可以通过这种方式编写整个脚本。无论如何,如果您想扩展别名,那么只需确保要扩展的别名以空格结尾,然后再添加另一个。
alias grep='printf "%s " -I --exclude=\*~ ' \
exdir=' --exclude-dir=classes ' \
exsass='--exclude-dir=\*/.sass-cache '
grep exdir exsass exdir exsass
Run Code Online (Sandbox Code Playgroud)
-I --exclude=*~ --exclude-dir=classes --exclude-dir=*/.sass-cache --exclude-dir=classes --exclude-dir=*/.sass-cache
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1738 次 |
最近记录: |