在bash中,我通过此行获取执行脚本的父文件夹名称

SCRIPT_PARENT=`readlink -f ${BASH_SOURCE%/*}/..`

有什么方法可以在zsh和bash中都可以实现的吗?

假设我有一个内容为/some/folder/rootfolder/subfolder/script的文件:
echo `magic-i-am-looking-for`

我希望它的行为如下:
$ cd /some/other/folder
$ . /some/folder/rootfolder/subfolder/script
/some/folder/rootfolder
$ . ../../folder/rootfolder/subfolder/script
/some/folder/rootfolder
$ cd /some/folder/rootfolder
$ . subfolder/script
/some/folder/rootfolder
$ cd subfolder
$ . script
/some/folder/rootfolder

这应该可以在bash和zsh中使用。我的第一个实现了此行为,但是由于$BASH_SOURCE在zsh中不起作用。

所以基本上它是:

有没有办法在zsh中模拟$BASH_SOURCE,也可以在bash中使用?

最佳答案

我现在意识到zsh中的$0的行为类似于bash中的$BASH_SOURCE的行为。所以在可用时使用$BASH_SOURCE并回退到$0解决了我的问题:

${BASH_SOURCE:-$0}

$PATH采购时,还剩下一点zsh边缘情况:
zsh> cat ../script
echo \$0: $0
echo \$BASH_SOURCE: $BASH_SOURCE
echo '${BASH_SOURCE:-$0}:' ${BASH_SOURCE:-$0}
zsh> . script
$0: script
$BASH_SOURCE:
${BASH_SOURCE:-$0}: script
bash> . script
$0: bash
$BASH_SOURCE: /home/me/script
${BASH_SOURCE:-$0}: /home/me/script

我可以做一个which script,但这在其他情况下效果不佳

关于bash - 如何在zsh中获取执行脚本的父文件夹?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11685135/

10-13 09:31