并发脚本执行后出现乱码的shell换行符

时间:2014-02-08 09:59:18

标签: bash shell unix makefile

我正在尝试从makefile同时执行shell脚本并将所有输出转到stdout但是当我这样做时,新行变得乱码并且我找到的唯一可靠修复是reset

生成文件:

all: t1 t2 t3 t4
t1 t2 t3 t4:
    @./test.sh true

test.sh:

#!/bin/bash
script -q /dev/null "$@" 2>&1 > /dev/null 2>&1

调用:

$ make -j

没有你想象的输出,但有时会打破终端,我必须reset

有时换行和回车在运行后不起作用:

Devbox:Desktop user$ time make -j
real    0m0.019s
                user    0m0.019s
                                sys 0m0.022s
                                                Devbox:Desktop user$

从脚本中删除script并用"$@"替换该行允许它正常工作,但我使用脚本来保留命令的颜色输出。

LOG=$(script -q /dev/null "$@" 2>&1 | tr -d '\r' | cat)

1 个答案:

答案 0 :(得分:0)

我认为script不是正确的程序。我曾经给过一个answer如何欺骗程序进行彩色输出,即使它们的输出没有使用LD_PRELOAD和glibc函数isatty()的覆盖版本到终端。

基于此,您的test.sh可能如下所示:

#!/bin/bash
output=$(LD_PRELOAD=./libisatty.so $@)
return_value=$?

echo -e "$output"
exit $return_value

你的Makefile就像这样:

all: t1 t2 t3 t4$ 
t1 t2 t3 t4:$
^I@./test.sh ls -al --color=auto$