我有一个简单的函数,比如
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的静态值被添加到预钩函数中。我想要在prexec执行时获得当前值。我该怎么做呢?
发布于 2017-01-30 22:40:15
对于普通shell变量,您将获得当前值:
% x=1
% function test_hook() { echo $x; }
% add-zsh-hook preexec test_hook
% true
1
% x=2
1
% true
2但是,$LINENO是一个非常特殊的变量。从文档中:
线路号
正在执行的当前脚本、源文件或shell函数中最近启动的当前行的行号。注意,在shell函数的情况下,行号指的是出现在原始定义中的函数,而不一定是内置函数所显示的那样。
当您的钩子函数正在执行时,根据定义,它是最近启动的shell函数、脚本或源文件。因此,$LINENO总是在钩子函数中给出当前行。无法访问外部作用域的$LINENO。
然而,在我看来,即使你可以在你的钩子中访问外部的$LINENO,它也会导致非常奇怪的行为。假设您的终端是30行高($LINES为30),它会在执行第30、31和32条命令之前清除终端,然后对接下来的27条命令什么都不做,然后在第60、61和62条命令之前再次清除,依此类推。我不认为这是你试图实现的目标……
https://stackoverflow.com/questions/41771926
复制相似问题