发布时间:2014-09-05 16:54:45作者:知识屋
今天在使用debian 脚步启动一个sh时一直报错,由此引发此文的形成:
在使用bash shell时,我们有这样的场景:
env.sh -- 定义公共的变量
run1.sh -- 定义运行代码
run2.sh -- 定义运行代码
如果env.sh中的内容是根据具体的run*.sh作变化,那么就需要给env.sh中传入变量。
很多人可能会采用这种方式,
场景模拟:
env.sh:
view plaincopy to clipboardprint?#!/bin/sh
echo $1
#!/bin/sh
echo $1
run1.sh:
view plaincopy to clipboardprint?#!/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
#!/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
分析:
表面现象问题出在:
view plaincopy to clipboardprint?. /home/admin/tmp/madding.lip/env.sh $CURRENT_PATH
. /home/admin/tmp/madding.lip/env.sh $CURRENT_PATH
根本:
debian默认使用的:
view plaincopy to clipboardprint?madding@wmmad:~$ which sh
/bin/sh
madding@wmmad:~$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Jun 6 05:49 /bin/sh -> dash
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使用:
view plaincopy to clipboardprint?[admin@**** ~]$ which sh
/bin/sh
[admin@**** ~]$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Nov 16 2010 /bin/sh -> bash
[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
作者“madding.lip”
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能