Mac:终端和 shell 配置

今天不写博客了,水一篇玩玩。老祖宗说,工欲善其事,必先利其器。很多做开发的同学都喜欢 Mac,我也是,自从用了之后爱不释手,但是当帮助一些同学解决问题的时候,总是发现,有些同学的终端使用的是 Mac 自带的终端和 shell,特别难用,完全无法发挥 Mac 的威力,然后给他们推荐怎么配置一下更好用,但是发现很多同学都是,现在已经懒得一个一个同学的说了,所以今天我就写一篇文章,怎么配置更好用的终端和 shell,希望下次再遇到直接能甩给他这篇文章就行。 一. 终端,iterm2 很多同学首先使用的终端是原生终端,那个终端说实话太难用了,我都想不出来理由,这么好用的电脑,苹果是如何忍受这么难用的终端的,这里给大家推荐一个好用的终端:iterm2。官网地址:https://iterm2.com/,GitHub 地址:https://github.com/gnachman/iTerm2,怎么安装这个就不用说了,傻瓜式的。 需要说明的是,安装完成之后,iterm2 默认窗口的大小,个人感觉是有点小的,所以做了一点点修改,希望默认窗口能大一些,修改步骤如下:打开工具 iTerm –> 点击mac左上角的 iTerm2 –> Preferences –> 选择Profiles –> Window –> Settings for New Windows,修改:Columns 和 Rows,个人设置的是 140 和 36,感觉还行,然后关闭,重新打开iTerm。就可以看到你更改后的效果。 二. shell,Oh My Zsh shell 是什么,我也不想解释了,大家可以自己搜索,另外如果想查看自己电脑有几种 shell,可以使用如下命令: cat /etc/shells 在 Linux 系统里执行这个命令和 Mac 略有不同,你会发现 Mac 多了一个 zsh,也就是说,mac 为用户预装了个 zsh。不过由于早期配置过于复杂,无人问津,很多人跑来看看 zsh 的配置指南,二话不说扭头就走了。直到有一天,国外有个穷极无聊的程序员开发出了一个能够让你快速上手的 zsh 项目,叫做:oh my zsh,官网地址:https://ohmyz.sh/,Github 地址是:https://github.com/ohmyzsh/ohmyzsh 使它的配置一下子简单起来了,下面就简单说说这个 Oh My Zsh。 安装,就一步: 由于目前系统的默认 Shell 都是 bash(可以通过:echo $SHELL 查看),所以需要使用如下命令修改当前用户使用 zsh: ...

May 2, 2020 · 2 分钟 · Bridge Li

运维之maven版Git上线脚本

之前的文章曾写了Git怎么用和Git服务器怎么搭建,一个公司仅仅只有这些还是远远不够的,这些仅仅是对源码的管理,程序猿开发好的源码怎么编译、打包、部署上线呢?下面就需要运维来解决这个问题了,不过这一段时间公司老大让老夫负责公司的源码由SVN迁Git,有幸接触到一点这块的知识,今天记录一下,万一老夫哪天失业了转行去做运维了呢! 在开始正式文章之前,首先感谢一下我在小马金融的同事:张学军,此脚本原始版本是由学军提供的,然后加上老夫的优化,可以说没有学军的无私帮助,老夫不可能完成这个脚本的,所以,谢谢,学军! #!/bin/bash # 1. 环境变量配置 export JAVA_HOME=/usr/local/jdk1.7.0_67 export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH # 2. 基础路径与变量定义 dir_path="/apps/project/project_name" work="project_name" DATE=$(date +%Y%m%d%H%M) tomcat="apache-tomcat-6.0.41_project_name" cd "$dir_path" if [ ! -d wars ]; then mkdir wars fi # 备份旧的 ROOT 目录 if [ -d ROOT ]; then tar cfz "ROOT-$DATE.tar.gz" ROOT mv "ROOT-$DATE.tar.gz" wars/ fi # --- 函数定义 --- # Git 更新与版本切换函数 git_update() { tag_version=$1 cd "$dir_path/$work" git checkout master git pull echo "$tag_version" # 检查 tag 是否存在 git_tag=$(git tag | grep -x "$tag_version") if [ "$git_tag" = "$tag_version" ]; then git checkout -b "$(date +%Y%m%d%H%M)" "$git_tag" else printf "tag number input error\n" exit 1 fi # 校验当前分支 commit 是否与 tag 一致 git_id1=$(git log -1 --format=%H) git_id2=$(git show "$git_tag" | grep commit | awk '{print $2}' | head -1) if [ "$git_id1" != "$git_id2" ]; then printf "The current git branch where inconsistent tag number is correct, please check the tag number\n" exit 1 fi } # Maven 构建函数 build() { local build_dir=$1 local build_work=$2 cd "$build_dir/$build_work" mvn package -DskipTests if [ -d "$build_dir/$build_work/target" ]; then cd "$build_dir/$build_work/target" return 0 else echo "build $build_dir/$build_work failed" exit 1 fi } # --- 主流程 --- # 1. 版本控制 tag_version=$1 if [ -z "$tag_version" ]; then printf "Please enter the version number\n" exit 1 else git_update "$1" echo "$1" >> "${dir_path}/tag.txt" fi # 2. 执行构建 build "$dir_path" "$work" type=$? if [ $type -eq 0 ]; then cd "$dir_path/$work/target" # 查找构建出的 war 包或 jar 包 (修正了原脚本 grep 的逻辑) # 假设生成的包名包含项目名且以 .war 或 .jar 结尾 work_name=$(ls | grep "$work" | grep -E "\.war$|\.jar$") else echo "build failure" exit 1 fi # 3. 清理旧部署 if [ -d "$dir_path/ROOT" ]; then rm -rf "$dir_path/ROOT" fi # 4. 部署新包 cd "$dir_path/$work/target/" # 将构建好的包重命名为 ROOT (模拟 Tomcat 默认部署) mv "$work_name" "$dir_path/ROOT" # 5. 覆盖配置文件 if [ -d "$dir_path/ROOT" ]; then # 使用 cp 替代 scp,因为是在本地操作 (原脚本使用 scp 可能是为了远程,若需远程请保留 scp 并补全路径) cp "$dir_path/config.properties" "$dir_path/ROOT/WEB-INF/classes/" cp "$dir_path/redis.properties" "$dir_path/ROOT/WEB-INF/classes/" cp "$dir_path/jdbc.properties" "$dir_path/ROOT/WEB-INF/classes/" fi # 6. 重启 Tomcat # 修正了原脚本中 grep 拼写错误 (gerp -> grep) 和逻辑连写问题 tomcat_status=$(ps aux | grep "$tomcat" | grep -v "grep" > /dev/null; echo $?) if [ $tomcat_status -eq 0 ]; then echo "Stopping Tomcat..." kill -9 $(ps aux | grep "$tomcat" | grep -v "grep" | awk '{print $2}') fi echo "Cleaning work and temp directories..." rm -rf "/usr/local/$tomcat/work/*" rm -rf "/usr/local/$tomcat/temp/*" echo "Starting Tomcat..." /usr/local/$tomcat/bin/startup.sh 注:里面的project_name是项目名,老夫隐藏了公司的实际项目名,就以project_name代替了,实际用的时候请根据实际情况修改 ...

October 24, 2015 · 3 分钟 · Bridge Li

Shell编程入门

一、Shell入门 我们先看一个小例子,永恒的经典:Hello World #!/bin/sh var="Hello World!" echo $var 保存,文件名为:hello 我们发现文件的第一行虽是一个注释,但是说明了文件的执行是由/bin/sh来执行,所以我们这么来执行这个文件: /bin/sh hello 就可以看到结果了,但我们知道在Linux下,一个文件是否可以执行是由文件属性来决定的,那么我们是否可以给他加上可执行权限,来执行这个文件呢? 先执行如下命令: chmod u+x hello 然后我们在直接敲命令:hello,看到什么现象? 所以一个文件被执行有这两个途径 二、Shell语法入门 输入/输出内部命令 ①. echo 输出命令 ②. read 输入命令 例如: #!/bin/sh echo Name: read NAME echo Phone: read PHONE echo SNAME,SPHONE > contact.txt if条件语句 在看if条件语句之前,我们先看一下:测试命令执行结果,在Linux下正确的命令执行结果为0,否则为其他值,我们可以用: echo $? 来看上一个命令的执行结果,懂了这些之后,我们在看那些常见语法 if 条件测试命令串 then 条件为真时执行的命令 else 条件为假时执行的命令 fi 注:if和then必须是两行,如果放一行,请在then前加“;” 例如: #!/bin/sh echo "Input file name:" read NAME if [ -d "$NAME" ]; then echo "Dir" else echo "Not Dir" fi case条件语句 case 条件测试命令串 in 表达式1) 分支1执行的命令 ;; 表达式2) 分支2执行的命令 ;; *) 其他命令 ;; esac 例如: ...

April 19, 2015 · 2 分钟 · Bridge Li