shell 运行gdb批处理命令时带有''不正确

ezykj2lf  于 2023-02-16  发布在  Shell
关注(0)|答案(1)|浏览(179)
>cmd="/usr/bin/gdb -q --batch -ex 'thread apply all bt full' /proc/8969/exe /tmp/core.xxx"
>ret=`$cmd`
Excess command line arguments ignored. (bt ...)
apply: No such file or directory.
/etc/all: No such file or directory.
Undefined command: "".  Try "help".
>echo $ret

>

但是-ex 'thread apply all bt full'改成了-ex 'bt',结果是正确的。我不知道为什么,也不知道如何修复它。
在命令行中键入/usr/bin/gdb -q --batch -ex 'thread apply all bt full' /proc/8969/exe /tmp/core.xxx"并执行成功

roqulrg3

roqulrg31#

cmd="/usr/bin/gdb -q --batch -ex 'thread apply all bt full' /proc/8969/exe /tmp/core.xxx
ret=`$cmd`

$cmd的参数扩展之后,shell将进行字段拆分,使用$IFS中的分隔符(通常为空格)进行拆分。

  • /usr文件夹/gdb
    • q
    • -批次
    • 不包括
  • 螺纹
  • 应用
  • 全部
  • 英国电信
  • 全'
  • /proc/8969/可执行文件
  • /tmp/网站core.xxx

这告诉GDB执行一个名为'thread的命令,并调试一个名为apply的可执行文件和核心文件all
获得所需结果的一种方法是运行

ret=`eval "$cmd"`
echo "$ret" # use quotes here to preserve newlines

如果使用bash或其他支持数组的现代shell,这可能更好:

gdbargs=(-q --batch -ex 'thread apply all bt full' /proc/8969/exe /tmp/core.xxx)
ret=`/usr/bin/gdb "${gdbargs[@]"}`
echo "$ret"

相关问题