繁体   English   中英

将bash脚本转换为鱼

[英]convert bash script to 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

和Fish脚本(不起作用):

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

首先,鱼的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 .时也会触发该事件cd . (即,当变量再次设置为相同值时)。

另外,我假设名称是指在显示提示时运行该名称,而不是实际上它本身会显示任何内容-在这种情况下,您fish_prompt其粘贴在fish_prompt函数中(尝试使用funced fish_promptfuncsave fish_prompt )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM