我有一个发出“^ M”字符的脚本,并希望在运行时用UNIX回车替换它们。目前,我将其输出和错误重定向到如下文件:
bash my_script.sh > my.log 2>&1
我知道我可以使用tr
来执行替换tr '\r' '\n'
,但我只知道如何使用静态文本文件执行此操作,并且我希望在命令完成之前检查输出日志运行。如何通过重定向动态更换?
编辑:脚本需要将stdout 和 stderr重定向到日志。
答案 0 :(得分:2)
bash my_script.sh |& stdbuf -oL tr '\r' '\n' > my.log
答案 1 :(得分:2)
bash
stdout
与stderr
和|&
\r
都有tr
的简写。只需删除bash script.sh |& tr '\r' '\n' > my.log
stdbuf -oL
为
tr
此外,您可以根据需要禁用输出缓冲,方法是执行insert into .. select ...
,然后在它之后使用create view v_event_by_day_2016
as
-- this is the complete query from your MVIEW
select ...;
create table event_by_day_2016
as
select *
from v_view_one;
alter table event_by_day_2016 inherit event_by_day;
alter table event_by_day_2016 add constraint check (...);
命令。
答案 2 :(得分:2)
这是适合您的事情:
bash myscript.sh | sed -u 's/\r/\n/' > my.log 2>&1
这将在命令运行时动态替换并仍然写入日志文件。
从sed手册页:
-u, --unbuffered
load minimal amounts of data from the input files and flush the output buffers more often