【问题标题】:How to make ${BASH_SOURCE[0]} work in .zsh when $0 does is not working?当 $0 不工作时,如何使 ${BASH_SOURCE[0]} 在 .zsh 中工作?
【发布时间】:2020-06-23 21:41:35
【问题描述】:

我正在尝试使这个最初由我的一位同事为 bash shell 编写的脚本工作。计划是在 zsh shell 中获取它。 据我了解,此脚本允许跨终端访问此目录中保存的帮助程序脚本。但是,当我只执行这一点时,我不断收到错误消息。

我尝试了以下一些已回答问题的解决方案,例如将${BASH_SOURCE[0]} 替换为${(%):-%N${(%):-%x}From here

PATHNAME="$_";

if [[ "$PATHNAME" != "$0" ]]; then
    export EXAMPLE_DIR=$(dirname $(dirname $(realpath ${BASH_SOURCE[0]})));
else
    >&2 echo "This script should be sourced, not executed in a subshell";
fi

我不明白为什么我不断收到错误,我真的很想了解它有什么问题。非常感谢任何帮助或阅读链接!

【问题讨论】:

  • 所以你的问题是为什么$_$0 不相等?你能解释一下为什么你认为他们是平等的吗?

标签: bash shell zsh


【解决方案1】:

zsh 对你来说更简单。

如果我们考虑这个例子,我们有文件 /tmp/test-z,它包含:

#!/bin/zsh
echo '_ => ' $_
echo '0 => ' $0

$0 的值始终是文件,如果调用或源文件

/tmp/test-zsource /tmp/test-z. /tmp/test-zzsh /tmp/test-z

$_ 的值设置为与源相同的$0,因此您可以在 ZSH

中替换 ${BASH_SOURCE[0]}) $0

【讨论】:

    猜你喜欢
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2015-07-14
    • 2021-07-12
    • 2011-04-15
    • 2012-08-13
    相关资源
    最近更新 更多