簡體   English   中英

並發腳本執行后外殼換行符亂碼

[英]Garbled shell newlines after concurrent script execution

我正在嘗試從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$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM