【问题标题】:script not working on ksh while working on bash and sh在处理 bash 和 sh 时脚本不能处理 ksh
【发布时间】:2016-07-26 00:54:23
【问题描述】:
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 - 工作正常。

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

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

【问题讨论】:

  • 第 452 行是做什么的?正在执行的命令可能有一个选项可以遵循符号链接。
  • 抱歉想纠正问题 ksh /sites/utils/local/bin/abc - 不起作用 - 给出提到的错误 bash /sites/utils/local/bin/abc -works sh /sites /utils/local/bin/abc -works
  • 什么操作系统?
  • @Faisal :我已经给出了解释这种行为的答案。希望它有所帮助:)
  • 您多次运行sed -i 's/\r//' xyz.sh。它失败了吗,head -1 xyz.sh | od -c 仍然显示\r 吗?

标签: bash shell ksh


【解决方案1】:

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

它适用于sh,因为sh 在类似Ubuntu 的系统中通常是dash 的符号链接。

无论如何我可以指定从 脚本本身

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

#!/bin/bash 

【讨论】:

  • 感谢我看到 local 前面有各种变量;例如 local xyz="some value" ,有什么解决方法吗?
  • 如果不是强制使用ksh,那么这里的问题就可以解决了。
  • 我已经在这里使用了#!/bin/bash。在哪里 bash bash: /bin/bash /usr/share/man/man1/bash.1.gz
【解决方案2】:

根据您对另一个答案的评论,我了解到您在文件 xyz.sh 中已经有了 shebang #!/bin/bash

只有当脚本像这样执行时,shebang才起作用

./xyz.sh

当你像这样执行它时

ksh xyz.sh

shebang 行被忽略,ksh 用于解释脚本。 现在阅读另一个答案,它说明了其余部分。

【讨论】:

  • 这是一个不错的收获:)。操作人员可能会考虑将此作为公认的答案。
  • 忘了说我正在使用 /abc 其中 abc 是 xyz.sh 的符号链接
  • 感谢当我从其他服务器复制相同文件时问题已解决。这仍然是个谜。
【解决方案3】:

当您在 Windows 上编写脚本然后将其上传到 LINUX/UNIX 时,经常会发生这种情况。

问题是windows添加的行尾:CRLF(Windows-Style)linux不理解,必须改成UNIX-Style行尾(LF

使用 Notepad++ 或其他方式,您只需要找到 \r\n(在扩展模式下)并替换为 \n 即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2018-12-13
    • 2015-05-23
    • 2017-12-04
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多