1
ディレクトリにある.cファイルをリストするmakefile(Makefile.inc)があります。Bash:ファイルの特定部分をbashで更新する
#
# Makefile.inc
#
..
unknown number of lines
..
LIB_FOO_BAR_SRCS = \
a.c \
f.c \
k.c \
m.c \
z.c
..
unknown number of lines
..
私は実行するたびに新しい.cファイルでMakefile.incを更新する短いスクリプトを書きたいと思っています。スクリプトへの入力は、ソースとMakefile.incの場所になります。
例:
#
# Makefile.inc
#
..
unknown number of lines
..
LIB_FOO_BAR_SRCS = \
a.c \
b.c \
f.c \
k.c \
m.c \
s.c \
z.c
..
unknown number of lines
..
いくつかの条件:
ソースディレクトリにSCおよびBCを添加し、スクリプトを実行した後、Makefile.incは下記いずれかに上記一方から更新されるべきです- Makefile.incの.cファイルのリストはソートする必要があります。
- LIB_FOO_BAR_SRCSの行番号は不明です。しかし、変数LIB_FOO_BAR_SRCSは間違いなく "LIB_"で始まり、 "_SRCS"で終わります。
- 私は膨大な数のMakefileにこれを使用する予定であるので、スクリプトは汎用的でなければなりません。
私は_SRCSのgrepの方法を考え出し、行番号を取得しました。 私はまた、追加するリストをフォーマットしました。
#!/bin/bash
TAB=$'\t'
MAKEFILE_PATH="PATH/TO/Makefile.inc"
SRC_PATH="PATH/TO/FOO_BAR/SRC"
Line=$(grep -n -m 1 "SRCS" $MAKEFILE_PATH | cut -f1 -d: | sort)
echo $Line
list_src=$(ls -p "$SRC_PATH"/*.c | xargs -n1 basename | sed "s/^/${TAB}/" | sed 's/$/ \\/' | sed '$ s/.$//')
echo $list_src
出力:
15
a.c \
b.c \
f.c \
k.c \
m.c \
s.c \
z.c
さて、難しい部分。行番号$ Lineの後に既存のリストを削除して新しいリスト($ list_src)を追加するには?
動作していますが、問題があります。ファイル名は1行で表示されます(スペース区切り)。元のファイルのように新しい行に表示する方法は? –