安慰成团。向光明面的过渡。日常任务的自动化
安慰成团。向光明面的过渡。日常任务的自动化

介绍
不管我们做了什么,输入命令有多快,事实是,我们仍然无法击败计算机的性能。从另一方面来说,如果我们多次重复同一个动作,我们很容易让计算机为难,不是吗?你可以写一个bash脚本(你最喜欢的编程语言),而不是输入相同的命令,浪费你的时间和精力,运行脚本,给自己一些时间,坐在座位上,想想永恒、宇宙或任何其他出现在你脑海中的东西。
在上一篇文章中,我们讨论了bash编程的原则。今天我们将学习如何在实践中应用这些知识。
自动化计划
- 快速
diff - 快速
diff+吉拉 API - 清洁
_dist - 更新大量存储库
- 克隆大量的存储库
- 有用的别名
给定的计划包括一些我每天做几次(有时甚至一小时)的任务。总的来说,自动化是一个独特的和原始的过程,它允许自动化你能想到的任何事情。希望在你读完这篇文章的时候,你会想出自己的自动化计划来超越你的 PC 性能。所以,在我们开始之前,给自己泡一杯热咖啡,享受我们用bash进入自动化世界的冒险。
快速差分
个人比较喜欢用 Git 。创建diff是一项频繁的任务,需要输入以下命令:
git diff origin/master origin/<branch-name> > "${HOME}/diff/diff-<branch-name>.diff"
<branch-name> —是我们需要为其创建diff的分支的名称
给定方法的缺点
- 只能手动输入命令
- 错误键入命令的风险
- 不容易记住
然而,如果你使用bash,这些问题都可以解决。您应该能够:
- 输入命令
- 输入分支机构的名称
- 获取
diff
顺利完成这一切。
这是 end 命令的外观
gdd <branch-name>
使自动化
现在不用输入很长的命令,输入./fast_diff.sh <branch-name>就够了。脚本会提醒您输入分支机构的名称,以防您忘记输入。
最后一笔
此时,您可能会对 end 命令感到疑惑,因为使用该脚本并不方便,因为我们仍然被绑定到我们使用的目录。
让我们仔细看看如何为执行文件创建一个新命令,而不是每次都写一个相对/绝对路径。
每个用户都有一个子目录~/bin,存储执行文件。如果你没有,你可以很容易地创建它。让它的使用如此方便的是,那里的所有文件都可以通过名字来访问,不需要指定它们的路径。我把用来创建diff :
#!/bin/bash "${HOME}/htdocs/rybka/tools/fast_diff.sh" "$@"的gdd文件移到了这个子目录
一些重要提示:
- 不需要指定文件扩展名。
- 属性
x应该以明确的方式指定(chmod +x <filename>) - 如果在
$PATH变量中没有找到bin,应该通过键入:PATH="${PATH}:${HOME}/bin"使其更加明显。
重新启动终端,使该文件可访问。现在,为了创建diff,您只需要输入给定的命令:
gdd <branch-name>
如果您不喜欢为每个命令创建一个新文件,您可以使用符号链接来优化此过程:
ln -s "${HOME}/htdocs/rybka/tools/fast_diff.sh" gdd
快速差分+吉拉 API
如果你使用吉拉或任何其他 API 任务管理器,你可以走得更远。例如,在吉拉 API 的帮助下,可以将 diff 分配给某个任务。为此,您需要使用卷曲。
求解算法
- 运行脚本
- 定义任务
id - 如果任务
id尚未提供,则向用户发送消息 - 假设所有操作都已正确完成,我们生成
diff并将其分配给一个任务
这是 end 命令的外观
gdd_jira <issue_id>
使自动化
您可能已经注意到了,这一次我们不需要将分支的名称传递给脚本。我们可以通过使用git命令:
branch=$(git rev-parse — abbrev-ref HEAD)执行一些简单的操作来得到它
清洁 _ 距离
在我们继续之前,让我们看看_dist目录是做什么用的。简单来说,就是 build 系统启动后(咕噜、大口等)保存所有CSS、JavaScript、模板(翡翠/泥巴、车把等)等文件的地方。该目录不一定必须带有_dist名称。你可以找到许多不同的变化。

在其中一个项目中,我们使用 Grunt。然而,我们的团队经常会遇到一个问题,那就是在一些文件中似乎并不总是能看到变化,大多数文件中的更少。为了解决这个问题,你可以一次清理一个或者所有主题的_dist目录。为此,您也可以使用 Grunt,手动清理目录,然而,它不会像使用bash那样有效。这里有更多的目录,不是一两个,甚至不是二十个。他们有很多人。使用脚本时的主要要求是不要在没有必要的情况下用包装器和/或依赖项使它过载。
让我们看看如何用 shell 的力量来做同样的事情:
find <path-to-themes> -type d -name "_dist" | xargs rm -rfv
<path-to-themes> —主题目录的路径
给定方法的缺点与diff创建的情况相同。另外,没有选项来指定我们想要删除的主题目录。
求解算法
- 运行脚本
- 如果你没有主题的名称,你可以删除
_dist目录中的所有主题 - 如果你有一个特定的主题名称,删除
_dist只为这一个
这是 end 命令的外观
clean_dist [<theme_name>]
使自动化
更新大量存储库

假设您在一个大型项目中工作,该项目包含第三方存储库的目录,即使您没有创建它们,您仍然需要支持和更新。如果他们是两个或三个,这可能不是一个大问题,虽然,就我个人而言,我不会这么有信心。
但是,如果您有超过 10-15 个存储库需要支持,该怎么办呢?
你需要花很多时间不断地跟踪他们。那么为什么不将这个过程自动化呢?
求解算法
- 转到带有存储库的目录
- 检查仓库是否在
master分支中 - 如果不存在,运行
git checkout - 然后
git pull
重要提示。即使存储库已经切换到master分支,它仍然有可能没有被更新。考虑到这一点,无论如何都应该竞选git pull。
这是 end 命令的外观
up_repo
使自动化
克隆大量的存储库
这个过程与前一个过程紧密相连。以使用户能够在实践中使用先前的命令。我需要为他/她提供一个第三方开发人员的存储库,将它添加到一个bash/core/vendors目录中(用户不一定需要知道)。根据npm modules的类比,这个存储库不应该和主存储库放在一起。用户所要做的就是执行命令,等待所有存储库的克隆完成。
求解算法
- 储存库列表被设置为一个数组
- 运行阵列周期
- 如果一个供应商有多个存储库,要特别注意
- 多做几项检查
- 执行
git clone
这是 end 命令的外观
clone_repo
使自动化
有用的别名
我想问我的读者几个问题,希望你诚实地回答。您多久使用一次这个命令?
这个命令呢?
git status
这个呢?
git push origin <branch-name>
你经常用这个吗?
ps aux | grep <user-name>
这个列表可以扩展,很可能每个人都有他/她经常使用的命令。因此,您可能会突然想到,对于所有这些命令,创建别名是一个明智的想法。

在下面的列表中,你会发现一些我日常使用的别名:
为了检查已经设置了哪些别名,您想要运行命令alias,但是没有特定的参数。
存储别名的位置
要创建永久别名,请将其添加到用户主目录(~)下的.bashrc文件中。您也可以将其添加到.gitconfig文件中,以便使用git。
不要深夜改化名
别名是一个强大的工具。然而,这里所有的密码。
睡觉前不要改化名。
我确实碰巧在深夜换了一个。接下来发生了什么你可以猜到。我不记得我做过,我花了一天的大部分时间试图找出为什么没有工作。
最后
当我刚进入bash的原理时,我的第一个想法是:“停,它们不就是系统管理员需要的吗?”。然而,我确实明白这一知识的重要性,它能让我减轻日常事务的负担。今天,我可以自信地说,如果你的工作与远程服务器或OS *nix有关,或者你与Windows OS(Bash on Ubuntu on Windows、 Windows 和 Ubuntu Interoperability )一起工作,那么对bash原理的了解和理解将会非常有用。
简单地说,脚本只不过是系统命令的基本列表,全部写在一个文件中。
不过,使用这个文件可以简化许多例行任务的执行,否则,您需要手动完成这些任务。
这里有一些与bash功能相关的链接,其中一些我已经在我的例子中展示过了:
就是这样。感谢您的关注,特别感谢那些把文章读完的人。



