shell混用引发的任务无法启动

今天在使用debian 脚步启动一个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默认使用的:

madding@wmmad:~$ which sh
/bin/sh
madding@wmmad:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jun  6 05:49 /bin/sh -> dash

redhat默认sh使用:

[admin@**** ~]$ which sh
/bin/sh
[admin@**** ~]$ 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








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值