一、问题现象
在CentOS
中编写了一段Shell
脚本,作用很简单,就是监控nginx的配置文件是否发生了变化,如果发生了变化就自动reload
一次,脚本如下:
1 |
|
在CentOS
中运行一切正常,但是在Debian中运行异常,具体是grep ${md5} /tmp/md5result &>/dev/null
的返回值总是0
-
Centos执行过程
1 | [root@txy201-51 ~]# sh -x monitor.sh |
-
Debian系统执行过程
1 | root@cd3b9bf29db3:/# sh -x monitor.sh |
二、问题排查
-
我在Debian的命令行手动执行以上命令,均无问题。
1 | root@cd3b9bf29db3:/# md5=`md5sum /etc/nginx/conf.d/port-to-domain.conf | awk '{print $1}'` |
-
尝试将
&>/dev/null
删除掉,再测试,发现正常了,不知道是啥原因导致的异常。
1 | root@cd3b9bf29db3:/# sh -x monitor.sh |
-
我尝试修改了运行脚本的方式,从
sh scritp.sh
修改为bash script.sh
,结果成功了
1 | root@cd3b9bf29db3:/# echo > /tmp/md5result |
三、结论
这个结论是问AI的您遇到的问题很可能是由于sh和bash在处理某些命令或脚本构造时的行为差异所致。在Linux系统中,sh通常指的是POSIX shell,而bash是Bourne Again SHell的简称,它是GNU项目的一个兼容sh的shell程序,提供了许多sh没有的特性和改进。
为啥CentOS可以,Debian不行?
应该是sh的版本等不同造成的。