go确实可以写命令行程序,配合go功能丰富的标准库,可以diy很酷的cli。python也可以。简单的操作只用shell也行。
所以今晚很无聊地用go、python和shell分别写了命令行程序。
其实实现简单的命令行还是比较容易入门的,要解决的问题有两个:
第一个问题是获取脚本中传入的命令行参数
go的有标准库flag,在编写脚本的时候就将传参和自定义变量名绑定。
python中可以通过引用引入sys模块,在sys.argv列表中获取参数,
shell中直接通过$#获取传入参数的个数,然后$1、$2...分别为第1、2...个参数
第二个问题是,go程序编译好后,或python、shell脚本编写好后的程序调用问题
go编译完是二进制文件,要执行时只要和shell脚本一样直接输入路径回车即可,但是如果想在整个系统的各个位置输入某个命令直接执行该文件,我们可以通过给系统添加自定义命令的方式:
Linux系统下打开$HOME的.bashrc
Mac系统下打开$HOME的.bash_profile
追加一行alias命令,比如:
//用shell语法
alias qqm="open /Applications/QQMusic.app" //打开qq音乐
保存文件,然后再敲入下面命令重载文件:
source .bashrc //如果你用的Linux
source .bash_profile //如果你用的macOS
此时在终端敲入:mmq,回车,就会立即打开QQ音乐。
我们可以通过这种方式实现在系统各个终端通过简单的命令调用我们的脚本。
而python不一样,因为要通过python xxx.py来执行,我目前的想法是:
1.执行自定义命令的时候调用shell脚本,在shel脚本里再调用“python xxx.py”,
2.命令行参数方面,在shell层获取参数,传给python脚本。
后来试了下这种方式,确实可行。。因为shell提供了一个$@语法用来将传入的$1、$2...以字符串形式输出:
//shell中下面代码会执行目标脚本并将参数尽数传给python脚本
testPy="python /path/to/my/python $@"
再后来。。发现原来可以直接像shell一样在python脚本第一行加入:
#! /usr/bin/env python3
此时就可以像执行shell一样执行python脚本了
不得不说shell编程确实很简洁。。。有时间要补一下。
下边是推荐的一些文章: