今天学习了shell script,发现一个困惑的问题,树上说bash xxx.sh命令与sh xxx.sh的执行效果应该是一样的,但我照搬正确的程序运行,root身份下,发现bash xxx.sh或./xxx.sh能执行通过,但sh xxx.sh就是提示莫名奇妙的语法错误,一会儿declare错误,但语法肯定没错,奇怪了。感觉是权限问题。是否sh命令处于不同的shell,连权限都改了?我是ubuntu系统。问大牛如何修改。
2 回答
跃然一笑
TA贡献1826条经验 获得超6个赞
在ubuntu中,sh只是bash的一个链接,执行的程序都是一样的,命令解释器是一样的。
但
bash xxx.sh和
./xxx.sh和
sh xxx.sh
还是有不同的,bash xxx.sh和sh xxx.sh都已经是直接执行命令,脚本程序作为这个命令的参数,不存在可行性权限的问题,而./xxx.sh则必须具有可执行权限,在部分自动化的脚本中出现像./xxx.sh这个的语句可能会出错。
然后,三条命令本身的语句不一样,部分脚本程序在执行时喜欢检测一下命令名本身([ "$0"]),对不同的命令会作出不同的反应,这个是取决与脚本本身的。
我没看过楼主的脚本,猜测,可能在xxx.sh这个脚本中有一条语句对命令名进行检测,然后进行条件跳转。
if [ "$0" = "sh xxx.sh" ]
then
......
fi
精慕HU
TA贡献1845条经验 获得超8个赞
.是表示在当前shell中执行脚本。所以会在当前的shell界面看到提示。
#!/usr/bin/bash 则是另开了一个shell执行脚本,所以看不到提示。
至于另开脚本是否会覆盖还没有测试过。
但是考虑可能会覆盖的情况 ,因该编写一个if 【】进行文件是否存在的测试。如果文件存在,进行判断是跳过还是覆盖。
否则文件不存在,则直接复制。
添加回答
举报
0/150
提交
取消