在 Makefile(gnu make,在 Ubuntu 系統上)中,我有以下命令:
.PHONY: stack-use
stack-use: $(BUILD_PATH)/$(TARGET).elf
@cat build/*.su | sort -t$$'\t' -k2 -nr | awk -F'\t' '{ if($$2>0) {print $$0}}' | column -s$$'\t' -t
跑步時make -n stack-use,我得到
$ make -n stack-use
cat build/*.su | sort -t$'\t' -k2 -nr | awk -F'\t' '{ if($2>0) {print $0}}' | column -s$'\t' -t
并運行列印的命令會產生我想要的輸出。
但是,問題是當我從 make 中運行它時,我得到:
sort: multi-character tab ‘$\\t’
所以看起來反斜杠字符被轉義了,因此 shell 命令不會“看到”預期的 TAB('\t')字符,而是一個反斜杠后跟一個 't'。
我怎樣才能解決這個問題?
更新:根據下面的建議,最終的作業代碼是
@cat build/*.su | sort -t"$(printf '\t')" -k2 -nr | awk -F'\t' '{ if($2>0) {print $0}}' | column -s"$(printf '\t')" -t
uj5u.com熱心網友回復:
正如評論所指出的,您在這里沒有使用 bash。
您可以通過添加以下內容強制您的 makefile 使用 bash 作為其 shell:
SHELL := /bin/bash
或者您可以重寫命令以使用符合 POSIX 的語法。例如可能替換-t$$'\t'為"-t$$(printf '\t')".
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535677.html
