#!/bin/sh
# Adds binary directory to PATH
case ":${PATH}:" in
*:/home/filip/.starkli/bin:*)
;;
*)
export PATH="/home/filip/.starkli/bin:$PATH"
;;
esac
# Loads completions based on shell
if [ -n "$ZSH_NAME" ]; then
fpath=(/home/filip/.starkli/share/zsh-completions $fpath)
autoload -U compinit
compinit
else
case $SHELL in
*/bash)
if [ -f "/home/filip/.starkli/share/bash-completions/starkli" ]; then
. /home/filip/.starkli/share/bash-completions/starkli
fi
;;
*/zsh)
fpath=(/home/filip/.starkli/share/zsh-completions $fpath)
autoload -U compinit
compinit
;;
esac
fi
您的日志中的这一行表明了该问题:
或者,更准确地说,这是一个问题,我们将在您测试以下内容后看看是否是问题。您在此
/home/filip/.starkli/env
上传的文件是:这在 bash 中运行良好,但在 POSIX 中
sh
或 Debian 中则不行,因为 Debiandash
是用来运行它的。如果你尝试使用dash
,你会得到这正是您所看到的。这是因为
dash
不支持数组,因此fpath=(/home/filip/.starkli/share/zsh-completions $fpath)
尝试添加/home/filip/.starkli/share/zsh-completions
到 zsh 特定$fpath
数组的行失败。我怀疑作者假设它会没问题,因为只有当[ -n "$ZSH_NAME" ]
为 true 时才会执行,这应该只在运行时出现zsh
,但忘记了它在到达那里之前会失败,因为该行本身是 POSIX sh 中的语法错误。因此,您可以尝试编辑此文件,并将
#!/bin/sh
第一行更改为#!/bin/bash
。然后它应该可以工作。OP 解释说,这(更改 shebang)并没有解决问题,大概是因为脚本是在现有
dash
会话中获取的,而不是独立运行的,所以 shebang 被忽略了。但是,在注释掉获取此脚本的那一行后~/.profile
,问题就解决了。