gpt4 book ai didi

linux - 看起来 Busybox shell 没有删除引号

转载 作者:太空宇宙 更新时间:2023-11-04 10:07:04 27 4
gpt4 key购买 nike

它是关于以下设置的:Linux 机器、bash、adb、带有 Busybox 的嵌入式 Linux 目标系统。对于目标系统,以下适用:

adb shell echo $SHELL
/bin/sh

adb shell echo $0
/bin/sh

问题是我在某些脚本中的 find 命令没有找到任何东西(已经通过其他方式证明正在寻找的项目实际上确实存在于目标上)。我的命令:

adb -s $AdbID shell find  / -type f \( -name "'"*audio*"'" -or     -name "'"*alsa*"'" \) \
\( -path "'"/usr/lib/*"'" -or -path "'"/usr/bin/*"'" -or -path "'"/etc/*"'" \)

如果使用 echo 进行调试,echo 获取以下字符串作为输入参数:

$ adb -s $AdbID shell echo find  / -type f \( -name "'"*audio*"'" -or -name "'"*alsa*"'" \) \
\( -path "'"/usr/lib/*"'" -or -path "'"/usr/bin/*"'" -or -path "'"/etc/*"'" \)
find / -type f ( -name '*audio*' -or -name '*alsa*' ) \
( -path '/usr/lib/*' -or -path '/usr/bin/*' -or -path '/etc/*' )

注意:上面的文字记录使用了转义换行符,因此您无需在此处滚动太多,但原始命令中并未使用这些换行符。

我想这同样适用于查找是否从命令字符串中删除 echo。对我来说,在所有其他类型的扩展之后,Busybox 似乎没有像我以前在 Bash 中那样删除引号。 Ash 似乎是 Busybox shell,在其手册中没有 reg 字样。引号删除被发现,所以不知道 ash 在这方面是如何工作的。

#

如果用 Windows 桌面机器 + dos 命令行替换 Linux 主机,其余元素如上例* 该命令工作正常。可以从以下几点看出区别:

*) 实际上还有其他目标系统,但是在这方面没有有意更改,因此关于目标系统的两个设置应该相同。

如果使用 echo 调试 echo 得到以下字符串:

c:\adb_shell>adb -s 2233445 shell echo find  / -type f \
\( -name "'"*audio*"'" -or -name "'"*alsa*"'" \) \
\( -path "'"/usr/lib/*"'" -or -path "'"/usr/bin/*"'" -or -path "'"/etc/*"'" \)
find / -type f ( -name *audio* -or -name *alsa* ) \
( -path /usr/lib/* -or -path /usr/bin/* -or -path /etc/* )

这里的命令从 shell 中获取输入参数的字符串,并删除了引号。

我在写这个 Q 的那一刻就意识到命令分组也不会按预期工作(busybox shell 会消耗括号所以'find'不会收到它们),让我们在其他范围内解决这个问题。可能命令有更多此类错误。

我相信在链中有两个 Linux shell 的情况下缺少引号删除对于我的命令字符串来说也是一个真正的问题。可能的原因和解决方案是什么?

最佳答案

注意在

"'"*audio*"'"

星号没有从 shell 中转义。如果匹配 *audio* 的文件位于当前工作目录中,shell 会很高兴地匹配它们。如果 ' 确实是文件名的一部分,您要改用 "'*audio*'"。然后 find 将搜索名为 '*audio*' 的文件(其中 find,而不是 shell,为 *)。

如果您只是想查找匹配*audio*(名称中任何位置的音频)的文件,则使用-name "*audio*" 等。

如果您确切地告诉我们您要查找的文件名是什么,将会有所帮助。

关于linux - 看起来 Busybox shell 没有删除引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51824845/

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