先說解決方案:
執行命令:
ln -fs /bin/bash /bin/sh # 將/bin/sh重新指向/bin/bash
問題描述
三消項目啟動前需要進行一系列的編譯、orm中間件生成等操作,都是通過shell腳本執行的,但是在一次制作tars-node鏡像時,shell腳本出現了錯誤信息:
原因分析
可以確認的是腳本並沒有改動過,之前一直運行正常。
查看報錯對應的代碼位置:
可以看到是第三行的一個map變量符號被指無法識別。
從報錯來分析,應該是shell腳本不支持map,但是我們的腳本是用bin/sh開頭的,正常情況應該是可以支持的。
懷疑是/bin/sh被指向了其他解釋器,
直接找到/bin/sh位置,進行查看:
看到/bin/sh被指向了dash解釋器,問題找到了,dash解釋器不支持map。
一般linux機器都是默認使用/bin/bash或者/bin/sh作為shell腳本解釋器的,沒想到tars-node官方基礎鏡像使用的是dash,導致問題出現。
解決方案
將/bin/sh重新指向/bin/bash:
ln -fs /bin/bash /bin/sh
查看結果: