為什麼.bashrc中的alias別名不能用於指令碼中和Makefile
下週高階計算機網路課要復現並且彙報A會文章,成功復現就能拿A。我選了篇sketch的,sliding sketch, SIGKDD 20’。
沒想到編譯發現一定要stdc++11,一堆錯誤。挨個改Makefile確實可以,但是太費勁,所以想在.bashrc裡面加個alias別名,
g++='g++ -std=c++11'
沒想到一點用都沒有。所以還是改了回去。使用自己寫的指令碼測試發現,alias在shell指令碼中用不了,發現因為如下原因。
簡要說,是因為shell分為互動模式和非互動模式,指令碼執行時預設是非互動,普通命令列預設是互動,而alias在非互動模式下預設是無法使用的,需要使用shopt命令支援expand_aliases才行。
但是我發現即便使用了shopt,在指令碼後面make時也沒設定成stdc++11。有人說是因為,make使用的不是bash,而是sh,所以不會將.bashrc作為配置檔案,不管.bashrc裡有什麼都沒用。至於如何改,語焉不詳。但是.bashrc裡的別名不能用於makefile,這樣設計是為了相容性更好,不會出現由於一臺裝置上的別名其他裝置上沒有而使編譯變複雜的情況。相關說法如下。
相關文章
- [Git] 別名(alias)Git
- .bash_profile和.bashrc的什麼區別(轉)
- linux怎麼使用alias建立命令別名?linux系統使用alias建立命令別名的技巧Linux
- 1.5 - Laravel 5.6 - Alias 別名Laravel
- 使用Node.js為require設定別名(alias)Node.jsUI
- 在.bashrc 裡用 alias 設定快捷命令
- linux 命令別名使用-aliasLinux
- make makefile cmake qmake都是什麼,有什麼區別?
- shell指令碼中不識別source命令指令碼
- ls命令+檔案型別+別名(alias)型別
- webpack的alias別名引用 在webstorm中點選不能跳轉?WebORM
- Linux基礎命令---alias別名Linux
- shell 命令在終端可以執行成功,為什麼放在 groovy 指令碼中不執行?指令碼
- Webpack 中css 如何 import 使用 alias別名 相對路徑WebCSSImport
- 使用go指令碼代替makefileGo指令碼
- 為什麼在pyhton中不能用函式重新賦值函式賦值
- 為什麼不上架,選擇企業簽名?
- 在 WebStorm 中,配置能夠識別 Vue CLI 3 建立的專案的別名 alias @WebORMVue
- 什麼是shell指令碼?Linux為什麼學習shell?指令碼Linux
- Nginx中root和alias的區別Nginx
- nginx關於root與alias的區別Nginx
- 為什麼為什麼為什麼為什麼為什麼你要做一名程式設計師?程式設計師
- redhat5之初始化指令碼檔案呼叫次序.bash_profile_.bashrc_bashrcRedhat指令碼
- 為什麼我對簽名訊息的簽名驗證在PHP程式碼中未工作?PHP
- Ubuntu-16.04.2-Server新增命令別名aliasUbuntuServer
- [20220328]查詢游標為什麼不共享指令碼.txt指令碼
- Nginx 學習系列(三) ------------- alias、root指令區別Nginx
- 程式中算錢不能用浮點型別是個什麼坑?型別
- SQL語句為什麼不會共享(中)SQL
- 為什麼"JavaScript"名稱中包含"Java"單詞?JavaScript
- 為什麼89C51的串列埠中斷只能用T1串列埠
- 轉享:為什麼模型會打敗指令碼?模型指令碼
- Makefile檔案是什麼?
- [20170904]11Gr2 查詢游標為什麼不共享指令碼指令碼
- Mac終端給命令設定別名alias的辦法Mac
- vue-cli 3.0配置webpack目錄別名aliasVueWeb
- 利用alias在Linux下設定命令別名Linux
- Jmeter 本身能錄製指令碼,為什麼還要用 Fiddler 生成指令碼?JMeter指令碼