gpt4 book ai didi

bash - DEBUG 陷阱存储未扩展的变量

转载 作者:行者123 更新时间:2023-11-29 09:29:20 42 4
gpt4 key购买 nike

我正在 try catch 在我的脚本中运行的命令,以便记录器可以重复这些命令。我的一个函数执行存储在数组中的命令。当它这样做时,我将命令存储在另一个数组中的 DEBUG 陷阱存储未扩展的变量而不是运行的命令。

这是一个例子:

set -o functrace
queue=("echo stuff" "echo things")
commands=()
lastcmd () { echo "Last command: ${commands[-4]}" ; }
runqueue () {
until [[ "${#queue[@]}" == 0 ]] ; do
${queue[-1]}
lastcmd
unset "queue[-1]"
done
}
trap 'commands+=("$BASH_COMMAND")' DEBUG
runqueue

结果如下:

bash-4.4$ runqueue
things
Last command: ${queue[-1]}
stuff
Last command: ${queue[-1]}

扩展后的命令有没有办法记录?

最佳答案

记录调试信息的标准选项是:

  • set -v : 展开前显示命令
  • set -x : 展开后显示命令

在您的特定情况下,eval echo "Last command: ${commands[-4]}"; 将评估

eval echo "Last command: ${commands[-4]}"
# after expansion
eval echo "Last command: ${queue[-1]}"
# after eval
echo Last command: echo thing

或者更简单,直接

lastcmd () { echo "Last command: ${queue[-1]}" ; }

关于bash - DEBUG 陷阱存储未扩展的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49505696/

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