【发布时间】:2020-04-16 04:04:55
【问题描述】:
起初我创建了一个脚本来“查找”一个文件并切换到该目录。唉,从脚本返回后,“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 的初始化代码之后移动它(忽略 #THIS 必须在 SDKMAN 工作的文件末尾!!! 的警告)。毫不奇怪,“sdk”不再有效。
有没有一种“正确的方法”在 .bashrc 中包含一个函数,这样 SDKMan 等其他脚本就可以保留在最后,不管出于什么原因,它必须在那里......???
【问题讨论】:
-
将函数定义放在该注释之前。
-
我试过了。 'goto' 函数的存在似乎导致 .bashrc 跳过 SDKMan 初始化命令。 'goto' 功能(是的,我对这个名字感到遗憾)有效,但找不到 'sdk' 命令。
-
把
set -x放在开头,这样你就可以看到正在执行的命令。 -
函数定义不应该对脚本的其余部分产生任何影响。您确定没有对脚本进行其他更改吗?
-
sdk 的东西需要放在最后的唯一原因是更新包时可以找到它来替换它。该位置对于正常运作应该无关紧要。