'source' .bashrc末尾的声明和'function'声明相互干扰



起初,我创建了一个脚本来"查找"一个文件并切换到该目录。遗憾的是,从脚本返回后,cd没有改变。脚本中的目录更改是该脚本的本地更改。我忘了。起诉我。

所以。。。我在.bashrc中间创建了与函数相同的代码。当我重新进入Bash shell时,该函数没有定义或不可见。所以…我把函数放在.bashrc的末尾,然后——瞧!——它奏效了。以下是功能:

function goto {
if [[ "$1" == "" ]]
then
echo "[ERROR] $0 requires a filename as input."
echo "[INFO]  Usage: $0 <filename> finds file and changes to that directory."
else
echo "[INFO] Looking for file: $1"
declare -x -a full_filepath=$(find . -name "$1")
if [[ "${full_filepath[0]}" == "" ]]
then
echo "[ERROR] Unable to find requested file $1. Exiting..."
else
local filepath=${full_filepath[0]%/*}
local filename=${full_filepath[0]##*/}
echo "[INFO] Switching to $filepath to locate $filename..."
cd $filepath
fi
fi
}

现在问题来了。我不得不在.bashrc中的SDKMan的init代码之后移动它(忽略#THIS必须在文件末尾才能使SDKMan工作的警告!!(。毫不奇怪,"sdk"不再有效。

有没有一种"正确的方法"可以在.bashrc中包含一个函数,这样像SDKMan这样的其他脚本就可以保留在最后,无论出于什么原因,它都必须存在。。。???

我卸载了SDKMan,然后重新安装了它,现在这些功能可以像SDKMan一样工作了。

他们添加的条件很奇怪。它让我想起了Perl中的快捷方式。

以下是添加到.bashrc:的代码

#THIS MUST BE AT THE END OF THE FILE FOR SDKMAN TO WORK!!!
export SDKMAN_DIR="/home/peter/.sdkman"
[[ -s "/home/peter/.sdkman/bin/sdkman-init.sh ]] && source "/home/peter/.sdkman/bin/sdkman-init.sh

这同样有效:

if [[ -s "/home/peter/.sdkman/bin/sdkman-init-sh" ]]; then source "/home/peter/.sdkman/bin/sdkman-init-sh"; fi

但我想它长了几个字符。如果他们使用了上面定义的var,它会更短:

if [[ -s "$SDKMAN_DIR/bin/sdkman-init-sh" ]]; then source "$SDKMAN_DIR/bin/sdkman-init-sh"; fi

巴玛:你说得对。在.bashrc中的位置无关紧要。谢谢维姆:谢谢你的小费。马克:我已经导出了函数。谢谢

相关内容

最新更新