[英]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_prompt
和funcsave fish_prompt
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.