![]() |
#1
|
|||
|
|||
![]()
Victor Sudakov написал(а) к All в Aug 17 10:01:34 по местному времени:
Dear All, Вот есть обычный Makefile result.txt: source1.txt source2.txt foo.awk < ${.ALLSRC} > ${.TARGET} Какую строчку добавить, чтобы если result.txt нормально создался, то его надо раздать по rsync/rdist/scp на несколько хостов, но только в случае, если он успешно создался. А если к примеру foo.awk отработал с ошибкой или source2.txt не нашёлся, то не раздавать? Victor Sudakov, VAS4-RIPE, VAS47-RIPN --- GoldED+/BSD 1.1.5-b20160322-b20160322 |
#2
|
|||
|
|||
![]()
Alex Korchmar написал(а) к Victor Sudakov в Aug 17 09:30:14 по местному времени:
From: Alex Korchmar <noreply@linux.e-moe.ru> Victor Sudakov <Victor.Sudakov@f49.n5005.z2.fidonet.org> wrote: all: result.txt rsync .... result.txt: source1.txt source2.txt foo.awk < ${.ALLSRC} > ${.TARGET} VS> Какую строчку добавить, чтобы если result.txt нормально создался, то его надо VS> раздать по rsync/rdist/scp на несколько хостов, но только в случае, если он VS> успешно создался. А если к примеру foo.awk отработал с ошибкой или source2.txt VS> не нашёлся, то не раздавать? > Alex --- ifmail v.2.15dev5.4 |
#3
|
|||
|
|||
![]()
Victor Sudakov написал(а) к Alex Korchmar в Aug 17 14:08:08 по местному времени:
Dear Alex, 14 Aug 17 09:30, Alex Korchmar wrote to me: VS>> Какую строчку добавить, чтобы если result.txt нормально создался, VS>> то его надо раздать по rsync/rdist/scp на несколько хостов, но VS>> только в случае, если он успешно создался. А если к примеру VS>> foo.awk отработал с ошибкой или source2.txt не нашёлся, то не VS>> раздавать? AK> all: result.txt AK> rsync .... AK> result.txt: source1.txt source2.txt AK> foo.awk < ${.ALLSRC} > ${.TARGET} В этом случае rsync будет выполняться при каждом запуске make, а мне нужно, чтобы только в том случае, если result.txt изменился. Victor Sudakov, VAS4-RIPE, VAS47-RIPN --- GoldED+/BSD 1.1.5-b20160322-b20160322 |
#4
|
|||
|
|||
![]()
Eugene Grosbein написал(а) к Victor Sudakov в Aug 17 14:59:52 по местному времени:
14 авг. 2017, понедельник, в 09:01 NOVT, Victor Sudakov написал(а): VS> Вот есть обычный Makefile VS> result.txt: source1.txt source2.txt VS> foo.awk < ${.ALLSRC} > ${.TARGET} VS> Какую строчку добавить, чтобы если result.txt нормально создался, то его надо VS> раздать по rsync/rdist/scp на несколько хостов, но только в случае, если он VS> успешно создался. А если к примеру foo.awk отработал с ошибкой или source2.txt VS> не нашёлся, то не раздавать? result.txt: source1.txt source2.txt foo.awk < ${.ALLSRC} > ${.TARGET} && rsync ... Если source2.txt не нашелся, то весь конвейер и не будет запущен. Eugene -- Поэты - страшные люди. У них все святое. --- slrn/1.0.2 (FreeBSD) |
#5
|
|||
|
|||
![]()
Eugene Grosbein написал(а) к All в Aug 17 15:01:37 по местному времени:
14 авг. 2017, понедельник, в 14:59 NOVT, Eugene Grosbein написал(а): VS>> Вот есть обычный Makefile VS>> result.txt: source1.txt source2.txt VS>> foo.awk < ${.ALLSRC} > ${.TARGET} VS>> Какую строчку добавить, чтобы если result.txt нормально создался, то его надо VS>> раздать по rsync/rdist/scp на несколько хостов, но только в случае, если он VS>> успешно создался. А если к примеру foo.awk отработал с ошибкой или source2.txt VS>> не нашёлся, то не раздавать? EG> result.txt: source1.txt source2.txt EG> foo.awk < ${.ALLSRC} > ${.TARGET} && rsync ... EG> Если source2.txt не нашелся, то весь конвейер и не будет запущен. Или можно чуток красивее, но функционально эквивалентно: result.txt: source1.txt source2.txt foo.awk < ${.ALLSRC} > ${.TARGET} rsync ... То есть, следующей командой. Eugene --- slrn/1.0.2 (FreeBSD) |
#6
|
|||
|
|||
![]()
Victor Sudakov написал(а) к Eugene Grosbein в Aug 17 16:04:32 по местному времени:
Dear Eugene, 14 Aug 17 15:01, you wrote to All: EG> Или можно чуток красивее, но функционально эквивалентно: EG> result.txt: source1.txt source2.txt EG> foo.awk < ${.ALLSRC} > ${.TARGET} EG> rsync ... EG> То есть, следующей командой. Вот в таком варианте (следующей командой) как раз и не работает, в смысле "rsync ..." отрабатывает вне зависимости от успешного завершения foo.awk, из-за чего я и пошёл искать другие варианты. А точно make при выполнении строчки "rsync ..." смотрит на код завершения предыдущей команды? Victor Sudakov, VAS4-RIPE, VAS47-RIPN --- GoldED+/BSD 1.1.5-b20160322-b20160322 |
#7
|
|||
|
|||
![]()
Alex Korchmar написал(а) к Victor Sudakov в Aug 17 12:34:50 по местному времени:
From: Alex Korchmar <noreply@linux.e-moe.ru> Victor Sudakov <Victor.Sudakov@f49.n5005.z2.fidonet.org> wrote: VS> В этом случае rsync будет выполняться при каждом запуске make, а мне нужно, нет, только если получился годный result.txt (я бы предоставил рсинку самому разбираться, надо ли в этом случае что-то синхронизировать, он для этого и придуман) Потому что в предложенном Женей варианте с && есть один минус - никак нельзя вручную заставить его отработать, если локальные исходники не изменились, а вот обновить его на других хостах все же захотелось. > Alex --- ifmail v.2.15dev5.4 |
#8
|
|||
|
|||
![]()
Victor Sudakov написал(а) к Alex Korchmar в Aug 17 17:06:12 по местному времени:
Dear Alex, 14 Aug 17 12:34, Alex Korchmar wrote to me: VS>> В этом случае rsync будет выполняться при каждом запуске make, а VS>> мне нужно, AK> нет, только если получился годный result.txt А result.txt всегда есть (возможно что и устаревший, и завалявшийся с прошлого запуска make), вот только конструкции all: result.txt echo "rsync ..." пофиг на то, что он устаревший. Разве что стирать result.txt каждый раз, но этого в условиях задачи не было. Victor Sudakov, VAS4-RIPE, VAS47-RIPN --- GoldED+/BSD 1.1.5-b20160322-b20160322 |
#9
|
|||
|
|||
![]()
Alex Korchmar написал(а) к Victor Sudakov в Aug 17 14:45:24 по местному времени:
From: Alex Korchmar <noreply@linux.e-moe.ru> Victor Sudakov <Victor.Sudakov@f49.n5005.z2.fidonet.org> wrote: VS> А result.txt всегда есть (возможно что и устаревший, и завалявшийся с прошлого VS> запуска make), вот только конструкции VS> пофиг на то, что он устаревший. нет, не пофиг, она сперва попытается его пересобрать. То есть она может лишний раз запустить rsync, но не будет синкать несуществующий или битый файл, или файл, более старый чем его исходник. > Alex --- ifmail v.2.15dev5.4 |
#10
|
|||
|
|||
![]()
Victor Sudakov написал(а) к Alex Korchmar в Aug 17 22:18:34 по местному времени:
Dear Alex, 14 Aug 17 14:45, Alex Korchmar wrote to me: VS>> А result.txt всегда есть (возможно что и устаревший, и VS>> завалявшийся с прошлого запуска make), вот только конструкции VS>> пофиг на то, что он устаревший. AK> нет, не пофиг, она сперва попытается его пересобрать. AK> То есть она может лишний раз запустить rsync, Вот именно. AK> но не будет синкать AK> несуществующий или битый файл, или файл, более старый чем его AK> исходник. Вот такая конструкция all: result.txt echo "rsync ..." result.txt: src1.txt src2.txt cat ${.ALLSRC} > ${.TARGET} будет каждый раз дергать rsync, даже если src1.txt и src2.txt не менялись. А это не надо. Так что придётся делать какую-то безобразную конструкцию через touch и флаг-файл. Victor Sudakov, VAS4-RIPE, VAS47-RIPN --- GoldED+/BSD 1.1.5-b20160322-b20160322 |