在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/