Terminal
輸出重定向問題 - 具有自增建構計數器的 m4 宏
我的目標是創建一個 m4 宏,它從文件 ( ) 中讀取一個值
BUILD
,增加它,然後將輸出保存到文件中。我想出了以下解決方案(BUILD.m4
):define(`__buildnumber__',`esyscmd(cat BUILD)')dnl define(`counter',__buildnumber__)dnl popdef(__buildnumber__)dnl define(`count',`define(`counter',eval(counter+1))counter')dnl count dnl
當
BUILD
包含 3 然後執行m4 BUILD.m4
輸出4
。太棒了!但是,當我這樣稱呼它時
m4 BUILD.m4 > BUILD
,BUILD
文件總是包含1
.如果我通過管道傳輸到另一個文件
m4 BUILD.m4 > B
,它可以工作,並且該B
文件將包含4
whenBUILD
was3
。我懷疑它與
>
輸出重定向有關。將這兩種變體與調試跟踪進行比較時,似乎重定向到同一文件的變體無法再從文件中讀取。變體重定向到不同的文件:
% m4 -dtaeq BUILD.m4 > B m4trace: -1- define(`__buildnumber__', `esyscmd(`cat BUILD')') m4trace: -1- dnl m4trace: -2- __buildnumber__ -> `esyscmd(`cat BUILD')' m4trace: -2- esyscmd(`cat BUILD') -> `3' m4trace: -1- define(`counter', `3')
變體重定向到同一文件:
% m4 -dtaeq BUILD.m4 > BUILD m4trace: -1- define(`__buildnumber__', `esyscmd(`cat BUILD')') m4trace: -1- dnl m4trace: -2- __buildnumber__ -> `esyscmd(`cat BUILD')' m4trace: -2- esyscmd(`cat BUILD') m4trace: -1- define(`counter', `')
有沒有這樣的方法,或者我需要使用其他一些方法來擷取輸出
BUILD
每當您在命令中使用時,shell 總是首先清空文件> BUILD
,然後再執行 m4,因此這永遠不會起作用。您可以嘗試將 write 放入
BUILD
m4 腳本中。例如,將最後一行替換count dnl
為syscmd(`echo 'count` >BUILD')dnl