首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在zsh prexec函数中访问环境变量的当前值?

问如何在zsh prexec函数中访问环境变量的当前值?
EN

Stack Overflow用户
提问于 2017-01-21 04:34:30
回答 1查看 419关注 0票数 0

我有一个简单的函数,比如

代码语言:javascript
复制
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执行时获得当前值。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2017-01-30 22:40:15

对于普通shell变量,您将获得当前值:

代码语言:javascript
复制
% 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条命令之前再次清除,依此类推。我不认为这是你试图实现的目标……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41771926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档