歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Ubuntu Shell引發編譯問題

Ubuntu 13.04下編譯Realtek提供的Linux source包時發生

make_release: 344: make_release: Syntax error: "do" unexpected (expecting "fi")
mv: 無法獲取"drivers/net/wireless/realtek/pci/rtl8192ce/../../combo/rtl8192c_8192d/rtl8192_8188CE_linux_drv/" 的文件狀態(stat): 沒有那個文件或目錄

改到Fedora 16下就順利編譯通過。

 

參考網上資料,發現是 Ubuntu 默認Shell的問題。Unbuntu默認 sh --> /bin/dash,與Fedora標准采用bash不一致。

echo $SHELL 返回 /bin/bash

ls -lis /bin/sh 返回指向/bin/dash

make 時,雖然makefile中已經有 #! /bin/bash,但實際上調用的還是sh。(該makefile是次級目錄中的)

bash - GNU Bourne-Again SHell
dash - Debian Almquist Shell

解決方式:

網上提到無效的文件限定的解決方式:

  • 文件首行采用 #! /bin/bash 實際上行不通
  • 文件首行采用 SHELL=/bin/bash 未測試,但應該不行。 echo $SHELL 已經指向bash

網上資料中提供了最終解決方式:

sudo dpkg-reconfigure dash

在出現的菜單中選擇 NO (不使用dash)

參考

Ubuntu下shell腳本運行異常:bash和dash的區別  http://www.linuxidc.com/Linux/2013-10/91100.htm

Ubuntu 的 bash和dash的區別  http://www.linuxidc.com/Linux/2012-03/57493.htm

更多Ubuntu相關信息見Ubuntu 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=2

Copyright © Linux教程網 All Rights Reserved