【问题标题】:Debug bash/ksh script and subscripts调试 bash/ksh 脚本和下标
【发布时间】:2013-10-21 23:45:33
【问题描述】:

我知道要调试脚本我可以发出命令

set -x 

在第一行。问题是当脚本启动其他一些脚本时,它们不会继承此设置。所以我的问题是是否有可能为 shell 和所有子 shell 或某些脚本和它启动的所有脚本全局设置这个标志?

【问题讨论】:

  • 有一个子shell的理由吗?
  • +1 您当然无法阻止内部脚本显式关闭该选项,但除了使用bash -$- 调用每个脚本之外,我没有看到其他方法。好奇地等待答案。
  • @kojiro 你永远不需要编辑源文件来调试,因为它本身就是错误的来源。答案是在命令行上将调试标志传递给 bash 并使用 SHELLOPTS。见:stackoverflow.com/a/56136968/37370
  • 我不认为我说的是你认为我说的,瞧,这八年前。

标签: linux bash shell debugging ksh


【解决方案1】:

在 Bash 中,您可以使用 export SHELLOPTS。它将使所有 Bash 子shell 继承 -x 选项(以及 SHELLOPTS 中的所有其他选项!)。

例子:

export SHELLOPTS
bash -x script1.sh

bash recursive xtrace

【讨论】:

    【解决方案2】:

    set -x 放入Shell 脚本中

    $ cat shell1.sh
    echo "Shell1"
    
    $ cat shell2.sh
    #!/bin/bash
    set -x
    ./shell1.sh
    echo "shell2.sh"
    
    $ ./shell2.sh
    + ./shell1.sh
    Shell1
    + echo shell2.sh
    shell2.sh
    

    【讨论】:

    • 如您所见,shell2.sh 中的每个命令都输出到屏幕,但 shell1.sh 中的命令不会输出到屏幕,因为 shell1.sh 脚本没有继承 -x 标志。我想要实现的是 shell1.sh 也向屏幕输出命令。我想在不修改 shell1.sh 脚本的情况下实现这一点。请记住,实际中的 shell1.sh 也会调用其他一些脚本,我希望它们也继承 -x 标志。
    • 啊,如果不修改 shell1.sh,这很棘手。让我们等待其他人发布他们的答案
    【解决方案3】:

    这取决于,你也用 -x 调用你的子shell,

    【讨论】:

    • 我不想修改每个脚本调用,因为主脚本可以调用一些下标,下标也可以调用一些脚本,所以修改每个调用是不现实的。
    • @Trismegistos,别担心。很明显你想要什么以及为什么。
    猜你喜欢
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多