我想将Bash脚本转换为Fish脚本以测试文件.nvmrc
是否存在。
Bash脚本:
## Auto load nvm when there's a .nvmrc file
OLD_PWD=""
promptCommand() {
if [ "$OLD_PWD" != "$PWD" ] ;
then
OLD_PWD="$PWD"
if [ -e .nvmrc ] ;
then nvm use;
fi
fi
}
export PROMPT_COMMAND=promptCommand
和鱼脚本(不工作):
set OLD_PWD ""
function nvm_prompt
if [ "$OLD_PWD" != "$PWD" ]
then
OLD_PWD="$PWD"
if [ -e .nvmrc ]
then bass source ~/.nvm/nvm.sh --no-use ';' nvm use
end
end
end
答案 0 :(得分:2)
首先,鱼if
不使用then
这个词。它刚刚消失。
所以
if [ "$OLD_PWD" != "$PWD" ]
then
变得只是
if [ "$OLD_PWD" != "$PWD" ]
(与其他if
类似)
其次,
OLD_PWD="$PWD"
不是有效的鱼脚本(因为它会告诉你)。使用
set -g OLD_PWD "$PWD"
第三,就目前而言,此功能目前已定义但从未运行过。当PWD改变时,你需要一些方法来执行它。而且,幸运的是,鱼有一种方法可以定义在变量上运行的函数 - --on-variable VARNAME
选项到function
。
所以你的解决方案看起来像这样:
function nvm_prompt --on-variable PWD
if [ "$OLD_PWD" != "$PWD" ]
set -g OLD_PWD "$PWD"
if [ -e .nvmrc ]
bass source ~/.nvm/nvm.sh --no-use ';' nvm use
end
end
end
您甚至可以取消$ OLD_PWD检查,或者您可能不会,因为当您执行此操作时也会触发该事件。 cd .
(即当变量再次设置为相同值时)。
另外,我假设名称意味着它在显示提示时运行,而不是它实际上显示任何东西 - 在这种情况下你将它粘贴在你的fish_prompt
函数中(试试{ {1}}和funced fish_prompt
)。