bash:糟糕的替代

 老屋时光_503 发布于 2023-02-10 10:12

/bin/shUbuntu下的默认shell()指向dash,而不是bash.

me@pc:~$ readlink -f $(which sh)
/bin/dash

因此,如果你chmod +x your_script_file.sh然后运行它./your_script_file.sh,或者如果你运行它bash your_script_file.sh,它应该工作正常.

运行它将sh your_script_file.sh无法工作,因为将忽略hashbang行并且脚本将被解释dash,这不支持该字符串替换语法.

5 个回答
  • /bin/shUbuntu下的默认shell()指向dash,而不是bash.

    me@pc:~$ readlink -f $(which sh)
    /bin/dash
    

    因此,如果你chmod +x your_script_file.sh然后运行它./your_script_file.sh,或者如果你运行它bash your_script_file.sh,它应该工作正常.

    运行它将sh your_script_file.sh无法工作,因为将忽略hashbang行并且脚本将被解释dash,这不支持该字符串替换语法.

    2023-02-10 10:14 回答
  • 我有同样的问题.确保你的脚本没有

    #!/bin/sh 
    

    在脚本的顶部.相反,你应该添加

    #!/bin/bash
    

    2023-02-10 10:14 回答
  • 对于到达此处的其他人,当使用命令的env变量语法时,也会出现此确切消息,例如,${which sh}而不是正确的$(which sh)

    2023-02-10 10:16 回答
  • 你的脚本语法是有效的bash和good.

    失败的可能原因:

      bash不是真正的bash,ksh或者是其他一些不理解bash参数替换的shell.因为你的脚本看起来很好并且可以使用bash.做ls -l /bin/bash并检查它真的是bash而不是sym链接到其他shell.

      如果你的系统上有bash,那么你可能会以错误的方式执行你的脚本:ksh script.sh或者sh script.sh(你的默认shell不是bash).因为你有适当的shebang,如果你有bash ./script.shbash ./script.sh应该没事.

    2023-02-10 10:16 回答
  • 尝试使用bash命令显式运行脚本,而不是仅将其作为可执行文件执行.

    2023-02-10 10:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有