Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将bash脚本转换为fish_Bash_Shell_Fish - Fatal编程技术网

将bash脚本转换为fish

将bash脚本转换为fish,bash,shell,fish,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

我想将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的
如果
不使用
这个词,那么
。它刚刚不见了

所以

变得公正

if [ "$OLD_PWD" != "$PWD" ]
(如果
,则与其他
类似)

第二,

OLD_PWD="$PWD"
不是有效的fish脚本(它会告诉您)。使用

第三,目前为止,这个函数已经定义,但从未运行过。当PWD发生变化时,您需要某种方法来执行它。而且,幸运的是,fish有一种方法可以定义在变量更改时运行的函数,即
--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_提示符
函数中(尝试
funced fish_提示符
funcsave fish_提示符
)。

首先,鱼的
如果
不使用
这个词,那么
。它刚刚不见了

所以

变得公正

if [ "$OLD_PWD" != "$PWD" ]
(如果
,则与其他
类似)

第二,

OLD_PWD="$PWD"
不是有效的fish脚本(它会告诉您)。使用

第三,目前为止,这个函数已经定义,但从未运行过。当PWD发生变化时,您需要某种方法来执行它。而且,幸运的是,fish有一种方法可以定义在变量更改时运行的函数,即
--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_提示符
函数中(尝试
funced fish_提示符
funcsave fish_提示符
)。

记住
[
本质上是
test
命令的别名,因此您需要在括号中加空格,就像bash一样。更重要的是,PROMPT_命令变量在fish中没有任何作用。请参阅。大家好,我已经用您的评论编辑了我的第一篇文章,但没有结果^问题。如果您想知道如何在fish中执行特定操作,请将该操作隔离并单独询问——但这应该是一个关于fish的问题;在一个只有fish专业人士才能回答的问题上添加bash标签是没有充分理由的。记住
[
本质上是
test
命令的别名,因此您需要在括号中加空格,就像bash一样。更重要的是,PROMPT_命令变量在fish中没有任何作用。请参阅。大家好,我已经用您的评论编辑了我的第一篇文章,但没有结果^问题。如果您想知道如何在fish中执行特定操作,请隔离该操作并单独询问——但这应该是一个关于fish的问题;在一个只有fish专家才能回答的问题上添加bash标签是没有道理的。感谢您的良好解释!我添加了编辑带有
--在变量上
的函数,工作非常好:)
函数nvm_提示符--在变量PWD上
谢谢你的解释!我添加了带有
--在变量上
的编辑函数,工作非常好:)
函数nvm_提示符--在变量PWD上