我想~/.zshrc
通过.
没有参数的运行来获取我的资源。所以这:
$ .
Run Code Online (Sandbox Code Playgroud)
应该这样做:
$ . ~/.zshrc
Run Code Online (Sandbox Code Playgroud)
我希望 的正常功能.
保持不变。唯一的区别应该是何时.
不带参数调用。
这可能吗?
我尝试了几种不同的方法。这是其中之一:
dot_zshrc_or_args() {
if [[ $# == 0 ]]; then
\. ~/.zshrc
else
filename=$1
shift
\. $filename $@
fi
}
alias .=dot_zshrc_or_args
Run Code Online (Sandbox Code Playgroud)
这是一个示例,说明为什么它不起作用:
$ echo 'echo $#' > count_args.sh
$ delegate() { . ./count_args.sh }
$ delegate foo bar baz
Run Code Online (Sandbox Code Playgroud)
最后一个命令应该 echo 3
,但0
如果.
已经定义了上述别名,它会回显。
基本问题似乎.
是 shell 专门处理的问题,允许它调用的脚本访问所有局部变量,包括$1
、$2
等。因此,如果我尝试使用.
另一个函数包装,我将失去该行为(如上例所示)。
我想到的两种方法是:
.
仅在交互式 shell中具有别名,而不是从另一个函数运行时。但是,无论我尝试什么,我都无法让它发挥作用。是否可以?(如果没有,我可以使用的最接近的替代方案是什么?我的最终目标是能够~/.zshrc
从 shell 中快速获取我的资源,最好以直观且易于记忆的方式。)
这可以通过做一些可怕的事情来完成accept-line
:
function _accept-line() {
if [[ $BUFFER == "." ]]; then
BUFFER="source ~/.zshrc"
fi
zle .accept-line
}
zle -N accept-line _accept-line
Run Code Online (Sandbox Code Playgroud)