将bash脚本转换为fish

时间:2018-01-08 14:49:11

标签: bash shell fish

我想将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

1 个答案:

答案 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)。