一些 sed
在后台运行时,命令似乎会失败。下面的最小示例。
一个sed
命令附加append
在以星号开头的行块之后*
。另一个只是替换一个词。sed
命令的顺序无关紧要。
TEXT=$'* first\n'
two_seds(){ echo "$TEXT" | \
sed "$!N;/.*\n\*/! s/\n\(.*\)/\nappend\n\1/;P;D" | \
sed "s/first/second/";}
Run Code Online (Sandbox Code Playgroud)
执行two_seds & wait
结果:
* second
append
Run Code Online (Sandbox Code Playgroud)
执行wait & two_seds
产量时:
* second
Run Code Online (Sandbox Code Playgroud)
所以第二个sed
命令总是有效,而第一个命令在&
.
虽然现在我知道如何解决它,但我很想了解发生了什么。部分是出于好奇,部分是为了以后在模糊的边缘情况下它不会咬我。
可以在bash
或 中复制dash
。跑步:
Ubuntu 18.04
sed (GNU sed) 4.4
GNU bash, version 4.4.19(1)-release (x86_64-pc-linux-gnu)
dash, version 0.5.8-2.10
Run Code Online (Sandbox Code Playgroud)