猿问

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

今天学习了shell script,发现一个困惑的问题,树上说bash xxx.sh命令与sh xxx.sh的执行效果应该是一样的,但我照搬正确的程序运行,root身份下,发现bash xxx.sh或./xxx.sh能执行通过,但sh xxx.sh就是提示莫名奇妙的语法错误,一会儿declare错误,但语法肯定没错,奇怪了。感觉是权限问题。
是否sh命令处于不同的shell,连权限都改了?我是ubuntu系统。问大牛如何修改。

白衣染霜花
浏览 295回答 2
2回答

跃然一笑

在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

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