命令行工具的使用问题
当有很多个命令行工具时,每一个都添加一个$PATH环境变量有点不优雅。于是首先想到的办法是往固定路径创建软链接,例如:~/.local/bin
。
但是,很多工具会根据当前工作路径来运行(例如生成配置文件),导致我们必须到工具所在路径下运行。因此我们可以创建脚本并传递命令行的参数来解决这两个问题。
接收命令行参数
手工处理
- $0 : 在用sh 或者 ./执行脚本时,指的是脚本名,用source或.执行时,永运是bash,这也反应了sh 或者 ./执行脚本的原理和source的方式是不同的.
- $1 : -v,第一个参数.
- $2 : -f
- $3 : -out
- $4 : /test.log
- 依次类推 $5 $6 …
- $# : 参数的个数,不包括命令本身,上例中$#为5.
- $@ : 参数本身的列表,也不包括命令本身,如上例为 -v -f -out /test.log –prefix=/home
- $* : 参数本身的列表,也不包括命令本身,但”$*” 和”$@”(加引号)并不同,”$*“将所有的参数解释成一个字符串,而”$@”是一个参数数组。如下例所示:
编写脚本
在固定路径中创建脚本,例如~/.local/bin/xxx
1 |
|
这样,就可以实现任意地方调用命令行工具。
第二种方法
在~/.zshrc
中添加一条别名。如下:
1 | alias program_name="cd /path/to/program && ./program_name" |
这样就可以了。和第一种的区别是运行结束后会留在程序所在目录。
第三种
其实前面两种还是有问题。
例如第一种,如果参数中有类似./file
这样的文件,那么会无法找到文件。
第二种,相同的情况,也会产生类似的结果。
于是最后的办法就是安装autojump
(包括oh-my-zsh插件),然后就可以直接j 工具文件夹
快速跳转了。
还有更好的解决方案
使用自定义的工具箱,类似于kali的应用菜单,集成,还能方便使用…
例如以下这种开源工具:
我还没试过,如果可以的话我可能会用,如果不好用我考虑写一个。就像kali的应用菜单一样最好。
参考文章: