坑爹的ubuntu /bin/sh
写了一个停止mongodb的脚本,代码片段如下:
1 #!/bin/bash 2 3 # stop mongo 4 echo "stop mongodb..." 5 MONGO_PID=`ps -ef | grep mongod | grep -v grep | awk '{print $2}'` 6 if [[ a${MONGO_PID} == a'' ]] 7 then 8 echo "mongodb is not running..." 9 else 10 kill -2 ${MONGO_PID} 11 sleep 5 12 if ps -ef | grep -v grep | grep -q mongod 13 then 14 echo "mongodb stop failed" 15 else 16 echo "mongodb stop successful" 17 fi 18 fi
执行方式为
sh stop.sh
在centos上执行正常,在ubuntu上执行就报错:
欸我就纳闷了,哥的代码没错啊,找了半天没找到原因,求助stackoverflow,找到原因:
换用以下执行脚本的方式就不会报错
./stop.sh
查了下dash是什么东西:
Debian和Ubuntu中,/bin/sh默认已经指向dash,这是一个不同于bash的shell,它主要是为了执行脚本而出现,而不是交互,它速度更快,但功能相比bash要少很多,语法严格遵守POSIX标准。
Ubuntu用的少了,坑大了,记录下