2013-01-25 86 views
0

我有一个makefile其所谓的“动作”由\t分隔。当我需要执行这些操作时,shell当然会抱怨\tgcc -o a filename.c Coomand not found。 该搜索仅生成如何修剪sed的前导/尾随制表符/空格。但是,如果不允许使用它,但只有bash修剪引导标签

这样的“规则”的例子是:

A : B C D E F G 
\tgcc -o a A 

\t这里仅仅是为了清楚,在实际的文件我按tab键。我需要的是能够读取制表符后面的内容,并用eval或反引号执行。如果我反驳了我读到的内容(即不删除标签字符),外壳就会抱怨。

+0

你可以举一个这样的makefile的例子吗? – jjlin

+1

所以你说你的行为线实际上是以一个反斜杠字符开始的,后面跟着一个't'字符,紧接着是实际的命令? – BobS

+0

这似乎类似于XY问题(http://mywiki.wooledge.org/XyProblem)问题; *为什么*你是否试图提取这样的命令,因为Makefile的目的是执行命令? – chepner

回答

1

您不应该在makefile的命令部分实际写入\ t。 按Tab键以获得所需的空间。

A : B C D E F G 
    gcc -o a A 

编辑 - 如果使用VI/VIM,你可以使用与的 空间(通常为4)的一组号码代替TAB的命令。检查一下。

+0

@llonpilaaja:而且不要复制我写的东西。因为我使用了4个空格而不是Tab键。你实际上需要tab键。 – jhc

+0

他在他的问题中提到他正在使用标签,并且只在问题中加上'\ t'来表示他使用了一个标签。有点令人困惑,但这不是问题。 –

+0

没有在他的帖子中看到编辑。无论如何,如果他从头开始写纯粹的makefile,这个问题真的不应该发生。我很好奇,如果下面的答案将工作。 – jhc

0

如果你只想使用bash,那么你需要解析文件,删除\t并转储到一个新文件。

类似这样;

while -r line; do echo "${line//\t/}" >> new_makefile; done < makefile