Shell混用引发的任务无法启动
在使用debian 脚步启动一个sh时一直报错,由此引发此文的形成: redhat默认sh使用:
在使用bash shell时,我们有这样的场景:
env.sh -- 定义公共的变量
run1.sh -- 定义运行代码
run2.sh -- 定义运行代码
如果env.sh中的内容是根据具体的run*.sh作变化,那么就需要给env.sh中传入变量。
很多人可能会采用这种方式,
场景模拟:
env.sh:
- #!/bin/sh
- echo $1
run1.sh:
- #!/bin/sh
- CURRENT_PATH='core'
- echo ${CURRENT_PATH}
- . /home/admin/tmp/madding.lip/env.sh $CURRENT_PATH
- echo "invoke $CURRENT_PATH-service $1"
- if [ "$1" = "stop" ] ; then
- echo "`date`:stop --------------------------------"
- echo "remove $shutdownFile"
- elif [ "$1" = "debug" ] ; then
- echo "`date`:debug --------------------------------"
- fi
执行命令:
sh run.sh start
结果:
在RedHat 5.3中:
core
core
invoke core-service
debian 6:
core
start
invoke core-service
分析:
表面现象问题出在:
- . /home/admin/tmp/madding.lip/env.sh $CURRENT_PATH
根本:
debian默认使用的:
- [email protected]:~$ which sh
- /bin/sh
- [email protected]:~$ ls -l /bin/sh
- lrwxrwxrwx 1 root root 4 Jun 6 05:49 /bin/sh -> dash
- [[email protected] ~]$ which sh
- /bin/sh
- [[email protected] ~]$ ls -l /bin/sh
- lrwxrwxrwx 1 root root 4 Nov 16 2010 /bin/sh -> bash
处理意见:
1.shell尽量用各个都兼容的方式书写,这样可移植性比较强
2.如果明确使用的shell,尽量在头部表明,这样执行./方式执行时能识别具体的shell
3.如果用具体的shell加脚步方式执行的话,建议明确shell脚步的解析器,如dash xx.sh 或者 bash xx.sh
相关推荐
tianhuak 2020-11-24
huha 2020-10-16
lianshaohua 2020-09-23
laisean 2020-11-11
zhangjie 2020-11-11
大牛牛 2020-10-30
firefaith 2020-10-30
liguojia 2020-10-20
wangzhaotongalex 2020-10-20
以梦为马不负韶华 2020-10-20
CARBON 2020-10-20
彼岸随笔 2020-10-20
lianshaohua 2020-10-20
yutou0 2020-10-17
JohnYork 2020-10-16
xiaonamylove 2020-10-16
Julyth 2020-10-16
applecarelte 2020-10-16
ourtimes 2020-10-16