php shell git,shell执行git命令

shell执行git命令

发布代码的git命令

发布博客代码到vps上,按顺序执行下面的git命令:

git pull origin test

git push origin master

在已经记住了这两个git命令的情况下,没有必要每次发布

都敲这么多代码。我需要一个shell脚本,一次性执行多条

命令。

删除缓存的linux命令

由于我把每篇文章数据都存储到了文件缓存中,每次编辑

旧文章重新发布后,并不能看到最新数据,需要到服务器

上手工清理缓存。这也很麻烦。

删除缓存的linux命令是:

rm -rvf /usr/local/nginx/html/blog/runtime/cache

编写shell脚本

#! /bin/bash

# 保存当前目录

currentDir=$PWD

echo "Start to publish...\n"

# 切换到项目目录

cd /usr/local/nginx/html/blog

# 执行git命令

git pull origin test

git push origin master

# 切换回原来的目录

cd $currentDir

# 删除缓存

rm -rvf /usr/local/nginx/html/blog/runtime/cache

echo "Success\n";

执行脚本

假设写好的脚本文件名为git.sh,若直接运行该脚本,会提示

无权限。那就必须让执行脚本的用户具有执行这个脚本的权限,

使用命令:

chmod +x ./test.sh #使脚本具有执行权限

以后每次发布项目的时候,直接使用执行脚本就可以了。

./git.sh

制作软连接

软连接与硬链接概念

软连接相当于windows里的快捷方式,删除它之后,原文件依然存在。

一个文件,有多个硬链接与其对应。只有将该文件的所有硬链接删除

之后,该文件才会被删除。

软连接与硬链接命令

待补充。

遇到的问题

error: 无法打开 .git/FETCH_HEAD:????

使用cg帐号执行git.sh的时候,出现这个错误提示。切换到root

帐号,su root后,可以执行这个脚本了。

坏的解释器: 没有那个文件或目录

错误现象

执行下面的脚本:

#! /bin/bash

# 保存当前目录

currentDir=$PWD

echo "Start to publish...\n"

# 切换到项目目录

cd /usr/local/nginx/html/blog

# 执行git命令

git pull origin test

git push origin master

# 切换回原来的目录

cd $currentDir

# 删除缓存

rm -rvf /usr/local/nginx/html/blog/runtime/cache

echo "Success\n";

控制台出现错误信息:

[root@localhost shell]# ./git.sh

bash: ./git.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录

用命令cat -A git.sh查看git.sh,内容非常奇怪,见下图:

bf7206fba067?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

shell执行git命令_坏的解释器

使用cat -A test.sh查看test.sh,test.sh能够正常运行。它的内容是:

bf7206fba067?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

shell执行git命令_正常

打开Notepad++的“显示所有字符”开关后,看到了正常脚本与异常脚本的差异:

bf7206fba067?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

shell执行git命令_正常与异常对比

产生原因

我只掌握这些:Unix系统里,每行结尾只有“”,即“\n”;Windows系统

里面,每行结尾是“”,即“\n\r”;Mac系统里,每行结尾是“”。

一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成

一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号

windows创建的文件是 \n\r结束的, 而linux,mac这种unix类系统是\n结束的。

解决办法

编程工作几乎全在windows上做,在windows上写出来的shell脚本因换行问题

不能在linux上执行,有两种解决方法:

写好脚本之后,借助linux的sed工具处理脚本。

用PHP写个文本处理工具,在linux上运行脚本之前,先用PHP工具处理好

shell脚本的换行问题。

先尝试一些第一种,在linux上执行命令

sed -i 's/\r$//'git.sh

-i表示插入,'s'表示替代模式,\r$表示任何以\r结尾的字符。整句的意思是,

把\r结尾的字符替换成空白。(不理解)

执行上述命令,屏幕打印报错信息:

[root@localhost shell]# sed -i 's/\r$//'git.sh

sed:-e 表达式 #1,字符 10:“s”的未知选项

使用下面的命令:

sed -i 's/\r$//' git.sh

没有任何输出信息。再使用cat -A git.sh查看,发现已经正常了。用sz命令把

git.sh下载到windows上用notepad++查看,也是正常的。

正确的sed代码与错误的sed代码仅有的差异是:

sed -i 's/\r$//'git.sh

sed -i 's/\r$//' git.sh

git.sh是否与前面有空格。

还有一个发现:若一个文件的换行符是\r,那么即使在windows下通过回车键

换行,换行符也是\n。可以保留一份以\n为换行符的shell脚本模板,每次新建

shell脚本的时候,都用它。

shell脚本切换用户后停止执行

其他知识

批量删除文件

下面的命令删除了所有的txt文件,包括当前目录的下级目录!

find . -name "*.txt" -type f | xargs -n 1 rm -f

find . -name "*.txt" -type f | xargs -n 1 rm

git查看远程仓库地址

git remote -v

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值