我有一个简单的功能,如
function clearit() {
REM=$(($LINENO % $LINES))
DIV=$(($LINENO / $LINES))
if [[ $DIV -gt 0 && $REM -lt 3 && $DIV ]]; then
clear
fi
echo $LINENO, $LINES
}
add-zsh-hook preexec clearit
在上面的函数中,$ LINE和$ LINES的静态值被添加到prehook函数中。我想在执行prexec时获取当前值。我怎么能这样做?
答案 0 :(得分:0)
对于普通的shell变量,将获取当前值:
% x=1
% function test_hook() { echo $x; }
% add-zsh-hook preexec test_hook
% true
1
% x=2
1
% true
2
但是,$LINENO
是一个非常特殊的变量。来自文档:
LINENO< S>
当前脚本,源文件或正在执行的shell函数中当前行的行号,以最近开始的为准。请注意,在shell函数的情况下,行号是指原始定义中出现的函数,不一定是内置函数所显示的函数。
执行钩子函数时,根据定义,它是最近启动的shell函数,脚本或源文件。因此$LINENO
始终为您提供钩子函数中的当前行。无法访问外部范围的$LINENO
。
但是,即使您可以访问钩子中的外部$LINENO
,我认为这会导致非常奇怪的行为。假设你的终端是30行高($LINES
是30),它会在执行第30,31和32命令之前清除终端,然后在接下来的27个命令中清空,然后在第60,第61和第60之前再次清除62,依此类推。我不认为这是你想要实现的远程......