【发布时间】:2017-01-18 16:17:11
【问题描述】:
我有一个包含这一行的 bash 脚本:
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
这在 OSX 上运行良好。
但是,当我移动它时,将脚本移动到运行 Debian 的 Docker 容器上,它在上面的行中失败并显示以下消息:
Bad substitution
知道为什么会这样吗?
【问题讨论】:
-
剧本上的shebang是什么?
#!/bin/sh不是 bash。 (即使/bin/sh被实现为 bash 的符号链接,它也会在 POSIX 模式下运行,从而禁用标准的许多扩展)。如果你想要完整的 bash 语法,你的 shebang 必须是#!/bin/bash. -
(同样,使用
sh yourscript运行脚本将使用仅保证提供POSIX 基线功能的shell 来解释它,即使该脚本以#!/bin/bash开头)。