在bash和sh上工作时,脚本没有在ksh上工作

时间:2016-07-26 00:54:23

标签: bash shell ksh

ksh xyz.sh gives following error.
abc is symlink to xyz.sh
/sites/utils/local/bin/abc[452]: local: not found [No such file or directory]
/sites/utils/local/bin/abc[453]: local: not found [No such file or directory]
/sites/utils/local/bin/abc[454]: local: not found [No such file or directory] 

bash xyz.sh - 工作正常。    sh xyz.sh -working fine。

无论如何,我可以指定将其作为bash或sh从脚本本身运行,因为此脚本作为自动化的一部分运行。 仅供参考:这里的默认shell是ksh :(

任何答案都会高度适用。 仅供参考:我检查了脚本的回车文本/ DOS文本字符并运行 sed -i' s / \ r //' xyz.sh多次。

3 个答案:

答案 0 :(得分:1)

错误很明显。
ksh没有local内置版。检查[ this ]

它与sh一起使用,因为sh通常是Ubuntu系统中dash的符号链接。

  

无论如何我可以指定将其作为bash或sh来运行   脚本本身

当然是的!使用shebang。将以下内容放在脚本的开头。

#!/bin/bash 

答案 1 :(得分:1)

从您的评论到其他答案,我们了解到您已在文件#!/bin/bash中设置了shebang xyz.sh

仅当脚本执行时才会使用shebang

./xyz.sh

执行时如

ksh xyz.sh

shebang行被忽略,ksh用于解释脚本。 现在阅读其他答案,其余的说明。

答案 2 :(得分:0)

很多时候,这是在Windows上创建脚本并将其上传到LINUX / UNIX之后发生的。

问题是Windows无法理解Windows添加的行尾:CR LF(Windows风格),对于UNIX风格的行尾必须更改它( LF

使用Notepad ++或其他工具,只需找到\r\n(在扩展模式下)并替换为\n,就可以了。