并发脚本执行后出现乱码外壳换行符



我正在尝试从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)

我认为script在这里不是正确的程序。我曾经给出过如何欺骗程序进行彩色输出的答案,即使它们的输出没有使用 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$

相关内容

  • 没有找到相关文章