2013-01-25 88 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