為什麼.bashrc中的alias別名不能用於指令碼中和Makefile

Yichuan_Sun發表於2020-11-12

下週高階計算機網路課要復現並且彙報A會文章,成功復現就能拿A。我選了篇sketch的,sliding sketch, SIGKDD 20’。

沒想到編譯發現一定要stdc++11,一堆錯誤。挨個改Makefile確實可以,但是太費勁,所以想在.bashrc裡面加個alias別名,

g++='g++ -std=c++11'

沒想到一點用都沒有。所以還是改了回去。使用自己寫的指令碼測試發現,alias在shell指令碼中用不了,發現因為如下原因。

為什麼alias在shell指令碼里用不了

簡要說,是因為shell分為互動模式和非互動模式,指令碼執行時預設是非互動,普通命令列預設是互動,而alias在非互動模式下預設是無法使用的,需要使用shopt命令支援expand_aliases才行。

但是我發現即便使用了shopt,在指令碼後面make時也沒設定成stdc++11。有人說是因為,make使用的不是bash,而是sh,所以不會將.bashrc作為配置檔案,不管.bashrc裡有什麼都沒用。至於如何改,語焉不詳。但是.bashrc裡的別名不能用於makefile,這樣設計是為了相容性更好,不會出現由於一臺裝置上的別名其他裝置上沒有而使編譯變複雜的情況。相關說法如下。

Makefile無法使用~/.bashrc中alias定義的命令別名
Makefile當中使用alias命令

相關文章