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