给alias添加自定义参数
# 原理
linux alias 命令用于设置指令的别名。语法格式为:
alias 别名='指令名称'
定义 alias 时,有时候会有用命令行参数的需求。但通过查证文档的结果是,alias 根本就不支持传递命令行参数。不过,我们可以变通的解决这个问题,即定义函数。
这里通过 alias 实现之前提到过的 “git一步完成文件的 add, commit 和 push功能的命令” 的为示例演示一下该功能的实现:
vim ~/.bashrc
alias g='gmerge() { git add .; git commit -m "$1"; git push; }; gmerge'
# 运用
# 合并代码
下面使用这种方式写一个封装了一系列动作的别名:
每次在git分支下工作完成,都要切到dev分支进行合并、推送远端。为了避免切分支,代码变动过大导致IDEA卡顿,所以单独有个文件夹下放dev分支代码。所以每次都是先在项目分支推送远端,然后切换到dev路径下合并代码,推送远端。于是给这部分流程写到alias别名中,在命令行一行搞定。
alias gmerge='merge() {
echo "推送代码";
git push;
path=$(pwd) ;
echo "当前路径:${path}" ;
folderName=${path##*/} ;
branch=$(git rev-parse --abbrev-ref HEAD) ;
echo "当前分支:${branch}" ;
echo "当前文件夹名:${folderName}" ;
cd ../../merge/"${folderName}" ;
echo "当前目录:$(pwd)" ;
echo "拉取代码" ;
git pull ;
echo "合并分支 origin/${branch}" ;
git merge origin/"${branch}";
echo "推送代码" ;
git push;
echo "回到目录${path}" ;
cd ${path};
}; merge'
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
其中主要难点:
- 工作中是多个项目组合开发,所以每次要进入到dev分支的项目路径不同
例如在开发项目路径下:
--future
----server(单独git项目 xxx分支)
----web-api(单独git项目 xxx分支)
2
3
用于合并到测试分支的项目路径:
--merge
----server(单独git项目 dev分支)
----web-api(单独git项目 dev分支)
2
3
第一版的想法是将项目名和分支名作为参数输入,这样就能进入到merge目录下对应的项目目录,然后合并指定分支代码。
用了一段时间觉得输入项目名和分支名麻烦,于是改进成自动获取项目名和分支名,便有了上面最终版本。
Linux shell中提取文件名和路径 (opens new window)
Git打印且只打印本地分支名 (opens new window)
# 删除其他分支
alias gclean='git branch | grep -v "$(git rev-parse --abbrev-ref HEAD)" | xargs git branch -D'
# 优化
上面的别名方式其实是整麻烦了,可以将方法直接写成shell脚本,然后放到环境变量中,这样就可以在任何地方使用了。
以下是一个简单的示例,演示如何创建一个名为myFunction
的自定义方法:
- 创建一个新文件,例如“~/myFunctions.sh”。
- 输入以下内容:
#!/bin/bash
function myFunction() {
echo "Hello, world!"
}
2
3
4
5
这个代码块定义了一个名为myFunction
的函数,当调用它时,它将打印一条消息“Hello, world!”。
保存并关闭文件。
接下来,需要执行以下命令使脚本可执行:
chmod +x ~/myFunctions.sh
- 最后,需要将脚本添加到终端环境中,以便随时可以使用该自定义方法。可以在
.bashrc
或.bash_profile
文件中添加以下行:
source ~/myFunctions.sh
- 保存并关闭文件,然后重新启动终端或运行
source ~/.bashrc
或source ~/.bash_profile
命令来使更改生效。
现在,就可以在终端中使用myFunction
方法了。只需在终端中键入myFunction
,它将打印出“Hello, world!”消息。