为了账号安全,请及时绑定邮箱和手机立即绑定

关于bash与sh的问题?麻烦帮忙看看!

关于bash与sh的问题?麻烦帮忙看看!

白衣染霜花 2021-08-31 11:07:54
今天学习了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



查看完整回答
反对 回复 2021-09-06
?
精慕HU

TA贡献1845条经验 获得超8个赞

.是表示在当前shell中执行脚本。所以会在当前的shell界面看到提示。
#!/usr/bin/bash 则是另开了一个shell执行脚本,所以看不到提示。
至于另开脚本是否会覆盖还没有测试过。
但是考虑可能会覆盖的情况 ,因该编写一个if 【】进行文件是否存在的测试。如果文件存在,进行判断是跳过还是覆盖。
否则文件不存在,则直接复制。

查看完整回答
反对 回复 2021-09-06
  • 2 回答
  • 0 关注
  • 294 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信