make: ссылка на переменные оболочки в вызове sed - PullRequest
2 голосов
/ 02 апреля 2011

Я использую make, и я хотел бы сослаться на переменную оболочки внутри sed.Тем не менее, в sed -call $$LASTMOD только расширяется до $LASTMOD, но я хотел бы видеть что-то вроде

-rw-r--r--    1 weiss    Administ     5752 Apr  1 23:44 src/stata/ini-00.do

Это работает для echo, но не для sed..ONESHELL, похоже, тоже не работает.

.SUFFIXES : .do .tmp

DOFILES = $(shell ls src/stata/*.do | sed 's/.do/.tmp/')

all: $(DOFILES)

.do.tmp: 
    LASTMOD=`ls -l $*`; echo $$LASTMOD; sed -e \
    "s/Last modified:.*/Last modified: $$LASTMOD/g" $*.do > $*.tmp 

ОБНОВЛЕНИЕ:

После применения изменений, предложенных @geekosaur, @William Pursell и @eriktousэто работает как шарм:

.SUFFIXES : .do .tmp

DOFILES = $(shell ls src/stata/*.do | sed 's/\.do/\.tmp/')

all: $(DOFILES)

.do.tmp: 
    LASTMOD=`ls -l $<`; \
    sed -e "s, Last modified:.*, Last modified: $$LASTMOD, g" $*.do > $*.tmp

Ответы [ 2 ]

3 голосов
/ 02 апреля 2011

Вы на самом деле используете двойные кавычки? Я ожидал бы такого поведения от одинарных кавычек; но с двойными кавычками вы получите sed синтаксических ошибок, если вы не избежите косой черты или не используете другие разделители шаблонов (я обычно использую ,, когда я знаю, что будет /, как с путями).

LASTMOD=$$(ls -l "$*"); \
sed "s,Last modified:.*,Last modified: $$LASTMOD,g" "$*.do" >"$*.tmp"
2 голосов
/ 06 апреля 2011

Вы имели в виду ls -l $*, или вы хотели написать ls -l $<? То, что вы делаете, выглядит правильно, за исключением этого. (Make выведет команду без расширения $ LASTMOD, но sed выполнит замену, которую вы хотите.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...