>  Q&A  >  본문

linux - /bin/bash -x是什么意思?

例如一个脚本dumb.sh的内容为

#! /bin/bash
idx=1
echo $idx

/bin/bash -x dumb.sh的结果为:

+idx=1
+echo 1
1

而且/bin/bash -x dumb.sh > trace.log后,trace.log内容仅为:

1

有什么办法将/bin/bash -x dumb.sh的整个结果保存下来么?

巴扎黑巴扎黑2745일 전1479

모든 응답(3)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:41:14

    处理方法:

    /bin/bash -x dump.sh > trace.log 2>&1

    原因:
    用strace跟踪一下

    strace /bin/bash -x dump.sh

    结果:

    write(2, "+ idx=1\n", 8+ idx=1
    )                = 8
    rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
    write(2, "+ echo 1\n", 9+ echo 1
    )               = 9
    write(1, "1\n", 21
    )                      = 2
    rt_sigprocmask(SIG_BLOCK, NULL, [], 8)  = 0
    read(255, "", 29)                       = 0
    exit_group(0)                           = ?

    可以看出+idx=1和+echo1是write(2,),这个是标准错误输出,虽然打屏幕,但是>默认不会把这个内容写入文件。
    如下这个命令可以把标准错误重定向到1中

    /bin/bash -x dump.sh > aa 2>&1

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-17 13:41:14

    在man bash手册中章节:CONDITIONAL EXPRESSIONS,-x的意思是:

    -x file
        True if file exists and is executable.

    参数-x会列出shell执行语句的顺序并将其打印。+echo 1这种语句并不是脚本的输出,所以不能将其保存到文件中。

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 13:41:14

    -x 调试模式

    회신하다
    0
  • 취소회신하다