Насколько я могу судить, ваш сценарий действительно вышел; просто подстановка процесса завершилась и печаталась в фоновом режиме после того, как внешняя оболочка напечатала свое приглашение.
Чтобы избежать этого, можно было бы просто передать вашу функцию вместо использования> >(...)
:
( echo; echo; echo 'du results:'; exit 0 ) | handle_json foo
Это работает, потому что при записи cmd1 | cmd2
две команды запускаются параллельно, при этом стандартный вывод cmd1
подключен к стандартному вводу cmd2
, и bash ожидает обе команды. завершить, чтобы считать конвейер завершенным.
Напротив, cmd1 > >(cmd2)
делает почти то же самое, за исключением того, что bash не ждет завершения cmd2
, прежде чем продолжить дальнейшие команды (в этом случае, печатая «масштабирование» и затем выходя,позволяя интерактивному bash напечатать свое приглашение ):, если случайно cmd2
занимает значительно больше времени, чем cmd1
, тогда происходит неожиданное состояние гонки, которое вы наблюдали.
perl -spi -e 's/JENKINS_PORT="8080"/JENKINS_PORT="8000"/' config.file
awk -F "=" '{OFS="="}/JENKINS_PORT/ && $NF ~ /8080/{gsub ("8080","8000",$NF)}1' filename >temp.txt && mv temp.txt filename
sed '/JENKINS_PORT="8080"/s/JENKINS_PORT="8080"/JENKINS_PORT="8000"/g' filename
выход
Питон
#!/usr/bin/python
import subprocess
import re
z=re.compile(r'JENKINS_PORT')
m=open('filename','r')
for k in m:
if re.search(z,k):
p=k.split('=')
if re.search("8080",p[-1]):
h=re.sub("8080","8000",p[-1])
print "{0}={1}".format("".join(p[0:-1]),h.strip())
else:
print k.strip()