gpt4 book ai didi

shell - U-Boot:如何在另一个环境变量中评估一个环境变量

转载 作者:行者123 更新时间:2023-12-04 17:08:38 24 4
gpt4 key购买 nike

在 U-Boot 中,我有这两个环境变量:

filepath=myimages
kernelfile=${filepath}/uImage.bin

当我运行此命令时:
echo ${kernelfile}

我得到这个输出:
${filepath}/uImage.bin

但是,我希望它改为像这样评估文件路径变量:
myimages/uImage.bin

如何做到这一点?

最佳答案

就目前而言,这无法通过 u-boot echo 完成。和 shell 现在。这是因为您看到的宏替换为 echoecho 之前由 u-boot 命令行解释器执行命令已启动。 echo 命令所做的基本上就是打印传递给它的字符串数组。

具体来说,如果你看 common/cli_simple.c从当前 (7/29/15) u-boot 的 git 存储库中,您将找到函数 cli_simple_run_command .这个函数被传递一个字符串 cmd可以包含多个由 ; 分隔的命令.如果您查看拆分此字符串的循环内部,您会发现 cli_simple_process_macros之后你会找到一个电话 cli_simple_parse_line其次是 cmd_process .跳过 cli_simple_process_macros现在,cli_simple_parse_line基本上是将一个字符串拆分成一个类似于 shell 的字符串数组,给你一个 argvargc它传递给 cmd_process执行 argv[0] 中的命令.

有趣的部分是cli_simple_process_macros .这将输入字符串作为第一个参数,输出字符串作为第二个参数。这个函数是一个简单的状态机,它寻找 u-boot 环境变量(或函数名所暗示的宏)并用环境变量的值替换它们。这可以通过调用 getenv 看到然后复制到输出字符串。如果你看看如何cli_simple_process_macros工作你会注意到它只执行一次,也就是说,如果一个环境变量包含另一个环境变量,它不会处理第二个环境变量,而是只复制字符串值。

最后,如果您查看 echo 的来源命令你会看到它很简单,基本上就是循环遍历argv传递给它并用适当的空格打印每个字符串。

所以基本上,如果你想要想要的行为,你需要改变 cli_simple_process_macros对环境变量进行迭代或更改 echo查找环境变量。你也可以换 cli_simple_run_command调用 cli_simple_process_macros多次,以便扩展所有嵌套的环境变量。

关于shell - U-Boot:如何在另一个环境变量中评估一个环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31712609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com