搜尋

首頁  >  問答  >  主體

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

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

1

2

3

<code>#! /bin/bash

idx=1

echo $idx</code>

/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的整个结果保存下来么?

巴扎黑巴扎黑2896 天前1592

全部回覆(3)我來回復

  • 伊谢尔伦

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

    處理方法:

    1

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

    原因:
    用strace追蹤

    1

    <code>strace /bin/bash -x dump.sh</code>

    結果:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    <code>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)                           = ?</code>

    可以看出+idx=1和+echo1是write(2,),這個是標準錯誤輸出,雖然打螢幕,但是>預設不會把這個內容寫入檔案。
    如下這個指令可以把標準錯誤重新導向到1中

    1

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

    回覆
    0
  • 怪我咯

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

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

    1

    2

    <code>-x file

        True if file exists and is executable.</code>

    參數-x會列出shell執行語句的順序並列印。 +echo 1這種語句並不是腳本的輸出,所以不能儲存到檔案中。

    回覆
    0
  • 黄舟

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

    -x 偵錯模式

    回覆
    0
  • 取消回覆