🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 引言 ` `本次实现在deepin终端输入`hello`会从网络获取一句话并显示在终端。大多数情况下我们用的shell是bash,我个人使用的是bash和fish,因为比较懒,又喜欢fish的自动补全功能和输入实时检测功能,所以我是bash和shell都在用。 ` `fish和bash的语法有一点点区别,比如: * [ ] 赋值 ` `fish:`set x "hello,bash"` ` `bash: `x="hello,bash"` * [ ] 整体替换 ` `fish:`echo (hostname)` ` `bash:使用“ ` ”代替括号 # 实现 ` `fish实现自定义的命令可以兼容bash的给定别名的方式,或者在`$HOME/.config/fish/functions/`路径下添加函数,然后每次每次加载fish时这些函数将会被识别为自定义的命令。函数的格式为: ` `下面我用cmd代替我想要添加的自定义命令进行格式说明。 ` `在`$HOME/.config/fish/functions/`路径下添加函数文件`cmd.fish`,文件中的格如下: ``` function cmd 脚本语言书写 end ``` ` `如果没有fish环境,使用`sudo apt install fish`进行安装,第一次使用的时候可能在`$HOME/.config/fish/`下没有`functions`文件夹,我们需要自己建立这个文件夹。 ``` cd $HOME/.config/fish/ mkdir functions ``` # 实现自定义的hello命令 ` `进行了上述说明,接下来我们来实现我们自己的hello命令。当上述环境准备好后,我们进行一下操作。 ` `在`$HOME/.config/fish/function/`下建立文件`hello.fish`,文件内容为: ```[fish] #!/usr/bin/fish function hello set js (curl -s https://v1.hitokoto.cn/) set text (echo $js | jq '.hitokoto') set text (string replace -a "\"" "" "$text") #去除引号 set author (echo $js | jq '.from') #提取 set author (string replace -a "\"" "" "$author") #去除引号 set text (echo " $text ---[$author]") set da (date +%Y年%m月%d日) set user (hostname) echo echo -e "\033[36m[Hello, $user! Today is $da!] \033[0m" echo -e "\033[36m$text\033[0m" echo end⏎ ``` # 使用 ` `添加了这个函数,我们要运行,吐过是刚刚添加的上述函数,那么我们在终端中输入`bash`先把shell切换到bash环境,然后再在终端输入`fish`将shell切换到fish,这个时候我们在fish环境下输入`hello`就可以看到我们需要的效果了。 ` `这之后只要是在fish环境中只需要输入`hello`就可以了。 # 运行截图 ![](https://img.kancloud.cn/20/b2/20b22f7d81503598c1feac9e8e869de7_814x208.png) ![](https://img.kancloud.cn/36/68/366825e690c7c62700634b4dcd5b2ce6_675x710.png)