【问题标题】:zsh displaying the exported functionzsh 显示导出的函数
【发布时间】:2022-10-20 03:26:13
【问题描述】:

创建了一个简单的函数并将其导出到.zshenv。当我启动终端时,它会在控制台上输出该功能。我怎样才能停止这样做?

.zshenv

export JAVA_HOME=/Users/guru/Library/Java/JavaVirtualMachines/temurin-1.8.0_322/Contents/Home
export export ENV=dev
function myfun() {
    echo "Hello!"
}
export -f myfun

zsh -x

guru@Gurunaths-MacBook-Pro ~ % zsh -x
+/Users/guru/.zshenv:1> export JAVA_HOME=/Users/guru/Library/Java/JavaVirtualMachines/temurin-1.8.0_322/Contents/Home
+/Users/guru/.zshenv:2> export export ENV=dev
+/Users/guru/.zshenv:9> export -f myfun
myfun () {
    echo "Hello!"
}
+/etc/zshrc:7> [[+/etc/zshrc:7> locale LC_CTYPE
+/etc/zshrc:7> [[ UTF-8 == UTF-8 ]]
+/etc/zshrc:8> setopt COMBINING_CHARS
+/etc/zshrc:12> disable log
+/etc/zshrc:15> HISTFILE=/Users/guru/.zsh_history 
+/etc/zshrc:16> HISTSIZE=2000 
+/etc/zshrc:17> SAVEHIST=1000 
+/etc/zshrc:20> setopt BEEP
+/etc/zshrc:24> [[ -r /Users/guru/.zkbd/xterm-256color-apple ]]

【问题讨论】:

  • 您的 .zshenv (或者可能是另一个启动文件)中有问题;在不知道其中有什么的情况下,除了猜测问题之外,不可能做更多的事情。 “出口”是什么意思?在 zsh 中,这实际上只适用于变量,而不适用于函数。另外,请don't post images of text;发布文本本身(在code block format 中,以便准确显示)。
  • 您的启动文件之一必须包含显示该功能的代码,并且您需要找出它发生的位置。对于第一个测试,我将使用zsh -lx 创建一个子shell 并分析输出。
  • @GordonDavisson我不知道函数不允许在zsh中导出。我认为它会像在 bash 中一样工作。此外,根据您的建议格式化代码。
  • @user1934428 TBH,我不明白 zsh -x 的输出是否有任何问题
  • 好吧,您查看输出,直到看到不需要的输出。就在此之前,跟踪显示了该打印的罪魁祸首语句。

标签: macos unix zsh


【解决方案1】:

我这样做是为了停止显示函数内容。 % 是我的 shell 提示符。

% tail -2 .zshenv
myfun() { echo "Hello!" }
export -f myfun > /dev/null
% zsh
% myfun
Hello!

今天才知道,zsh 只导出变量而不导出函数。但是,不知道为什么我的 zsh 版本会这样做!搜索了为什么不允许,发现了一些好东西Shellshock/bashdoor

【讨论】:

  • 这让我想知道您如何知道您的 zsh 导出函数。您发布的代码中没有任何内容可以验证这一点。更让我惊讶的是,您没有收到来自export -f 的任何错误消息,如果我是您,这肯定是我会进一步研究的东西。如果一个命令在错误调用时未能产生错误输出,这总是让人觉得你的环境中有危险的错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2011-01-11
相关资源
最近更新 更多