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