kubuntu 14.04 和 16.04 之间的 sh 脚本区别

kubuntu 14.04 和 16.04 之间的 sh 脚本区别

我从 Kubuntu 14.04 迁移到 16.04,从全新安装 16.04 开始并移植我的代码,发现两个版本在脚本处理方面存在差异。

设置如下。我位于一个包含可执行文件 (dtc) 和包含 sh 脚本 (dtc-version) 的子目录的目录中。如果使用 -v 参数调用“dtc”,它只会打印其版本。以下是“dtc-version”的相关部分:

#!/bin/sh

dtc="$*"
MAJOR=$($dtc -v | head -1 | awk '{print $NF}' | cut -d . -f 1)
...

在 14.04 中,我可以成功运行它

scripts/dtc-version dtc

在 16.04 中,相同的调用失败,如下所示:

scripts/dtc-version.sh: line 4: dtc: command not found

我可以通过以下调用成功运行它:

scripts/dtc-version ./dtc

在两个版本中,我的 shell 都是 bash,并且我的 $PATH 相同且不包含“。”

如果我在路径中添加“。”,16.04 版本可以使用未修饰的“dtc”参数来工作,但这不是一个可接受的解决方案,因为如果我的路径中有“。”,bitbake 会对我大喊大叫。

答案1

@glenn jackman 提供了相关线索。事实证明,在我的旧系统中,“dtc”在某个时候已被复制到“/usr/bin”。在我的旧系统中,它type -a dtc产生了结果dtc is /usr/bin/dtc,而在我的新系统中,它产生了结果bash: type: dtc: not found

这一切都是极其复杂的构建系统的一部分,包含各种设置步骤,并且已经多次变形。尽管遵循了一套工作说明,但我肯定跳过了一个步骤。我没有想到自己尝试“打字”,因为显然这不是问题所在 ;-)

感谢所有评论的人!!!

相关内容