標籤:linux 指令碼
***********************************************聲明**********************************************
原創作品,出自 “深藍的blog” 部落格,歡迎轉載,轉載時請務必註明出處,否則追究著作權法律責任。
表述有錯誤之處,請您留言或郵件([email protected])指明,不勝感激。
本文轉載必須保留此處:http://blog.csdn.net/huangyanlong/article/details/39357927
深藍的blog:http://blog.csdn.net/huangyanlong
***************************************************************************************************
今天,在安裝oracle資料庫的過程中,在執行安裝包指令碼時,報出比較奇怪的錯誤現象,如下所示:
[[email protected] test]# sh rpm.sh--單詞釋義--ambiguous:模糊不清的--redirect:直接的: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: command not found: command not found: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: ambiguous redirect: command not found: command not found: command not found
於是,查看了執行的指令碼,此指令碼是在WIN平台下提前編寫好的執行安裝包的指令,如下所示:
[[email protected] test]# cat rpm.sh --查看有問題的指令碼,沒有發現異常編寫rpm -ivh binutils-2.17.50.0.6-14.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh binutils-devel-2.17.50.0.6-14.el5.i386.rpm >> rpm.log 2>&1 rpm -ivh binutils-devel-2.17.50.0.6-14.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh compat-db-4.2.52-5.1.i386.rpm >> rpm.log 2>&1rpm -ivh compat-db-4.2.52-5.1.x86_64.rpm >> rpm.log 2>&1rpm -ivh control-center-2.16.0-16.el5.i386.rpm >> rpm.log 2>&1rpm -ivh control-center-2.16.0-16.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh control-center-devel-2.16.0-16.el5.i386.rpm >> rpm.log 2>&1rpm -ivh control-center-devel-2.16.0-16.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh gcc-4.1.2-50.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh gcc-c++-4.1.2-50.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-2.5-58.i686.rpm >> rpm.log 2>&1rpm -ivh glibc-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-common-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-devel-2.5-58.i386.rpm >> rpm.log 2>&1rpm -ivh glibc-devel-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-headers-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-utils-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh libstdc++-devel-4.1.2-50.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libstdc++-devel-4.1.2-50.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libX11-1.0.3-11.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libX11-1.0.3-11.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libX11-devel-1.0.3-11.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libX11-devel-1.0.3-11.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libXp-1.0.0-8.1.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libXp-1.0.0-8.1.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libXp-devel-1.0.0-8.1.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libXp-devel-1.0.0-8.1.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libXpm-3.5.5-3.i386.rpm >> rpm.log 2>&1rpm -ivh libXpm-3.5.5-3.x86_64.rpm >> rpm.log 2>&1rpm -ivh libXpm-devel-3.5.5-3.i386.rpm >> rpm.log 2>&1rpm -ivh libXpm-devel-3.5.5-3.x86_64.rpm >> rpm.log 2>&1rpm -ivh make-3.81-3.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh pdksh-5.2.14-36.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh sysstat-7.0.2-3.el5_5.1.x86_64.rpm >> rpm.log 2>&1rm -rf binutils-2.17.50.0.6-14.el5.x86_64.rpmrm -rf binutils-devel-2.17.50.0.6-14.el5.i386.rpmrm -rf binutils-devel-2.17.50.0.6-14.el5.x86_64.rpmrm -rf compat-db-4.2.52-5.1.i386.rpmrm -rf compat-db-4.2.52-5.1.x86_64.rpmrm -rf control-center-2.16.0-16.el5.i386.rpmrm -rf control-center-2.16.0-16.el5.x86_64.rpmrm -rf control-center-devel-2.16.0-16.el5.i386.rpmrm -rf control-center-devel-2.16.0-16.el5.x86_64.rpmrm -rf gcc-4.1.2-50.el5.x86_64.rpmrm -rf gcc-c++-4.1.2-50.el5.x86_64.rpmrm -rf glibc-2.5-58.i686.rpmrm -rf glibc-2.5-58.x86_64.rpmrm -rf glibc-common-2.5-58.x86_64.rpmrm -rf glibc-devel-2.5-58.i386.rpmrm -rf glibc-devel-2.5-58.x86_64.rpmrm -rf glibc-headers-2.5-58.x86_64.rpmrm -rf glibc-utils-2.5-58.x86_64.rpmrm -rf libstdc++-devel-4.1.2-50.el5.i386.rpmrm -rf libstdc++-devel-4.1.2-50.el5.x86_64.rpmrm -rf libX11-1.0.3-11.el5.i386.rpmrm -rf libX11-1.0.3-11.el5.x86_64.rpmrm -rf libX11-devel-1.0.3-11.el5.i386.rpmrm -rf libX11-devel-1.0.3-11.el5.x86_64.rpmrm -rf libXp-1.0.0-8.1.el5.i386.rpmrm -rf libXp-1.0.0-8.1.el5.x86_64.rpmrm -rf libXp-devel-1.0.0-8.1.el5.i386.rpmrm -rf libXp-devel-1.0.0-8.1.el5.x86_64.rpmrm -rf libXpm-3.5.5-3.i386.rpmrm -rf libXpm-3.5.5-3.x86_64.rpmrm -rf libXpm-devel-3.5.5-3.i386.rpmrm -rf libXpm-devel-3.5.5-3.x86_64.rpmrm -rf make-3.81-3.el5.x86_64.rpmrm -rf pdksh-5.2.14-36.el5.x86_64.rpmrm -rf sysstat-7.0.2-3.el5_5.1.x86_64.rpmrpm -qa|grep binutils >> queryrpm.log 2>&1rpm -qa|grep compat >> queryrpm.log 2>&1rpm -qa|grep control >> queryrpm.log 2>&1rpm -qa|grep gcc >> queryrpm.log 2>&1rpm -qa|grep glibc >> queryrpm.log 2>&1rpm -qa|grep gnome >> queryrpm.log 2>&1rpm -qa|grep libstdc++ >> queryrpm.log 2>&1rpm -qa|grep make >> queryrpm.log 2>&1rpm -qa|grep pdksh >> queryrpm.log 2>&1rpm -qa|grep sysstat >> queryrpm.log 2>&1
接下來採取的方法是,把該指令碼中的內容在LINUX平台下重新拷貝到建立的檔案中,如下所示:
[[email protected] test]# cat hyll.sh--LINUX系統下,把rpm.sh中的指令複製了一遍到新的指令檔hyll.sh中--重新執行指令碼內容如下,與之前rpm.sh指令碼內容完全一樣rpm -ivh binutils-2.17.50.0.6-14.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh binutils-devel-2.17.50.0.6-14.el5.i386.rpm >> rpm.log 2>&1 rpm -ivh binutils-devel-2.17.50.0.6-14.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh compat-db-4.2.52-5.1.i386.rpm >> rpm.log 2>&1rpm -ivh compat-db-4.2.52-5.1.x86_64.rpm >> rpm.log 2>&1rpm -ivh control-center-2.16.0-16.el5.i386.rpm >> rpm.log 2>&1rpm -ivh control-center-2.16.0-16.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh control-center-devel-2.16.0-16.el5.i386.rpm >> rpm.log 2>&1rpm -ivh control-center-devel-2.16.0-16.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh gcc-4.1.2-50.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh gcc-c++-4.1.2-50.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-2.5-58.i686.rpm >> rpm.log 2>&1rpm -ivh glibc-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-common-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-devel-2.5-58.i386.rpm >> rpm.log 2>&1rpm -ivh glibc-devel-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-headers-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh glibc-utils-2.5-58.x86_64.rpm >> rpm.log 2>&1rpm -ivh libstdc++-devel-4.1.2-50.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libstdc++-devel-4.1.2-50.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libX11-1.0.3-11.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libX11-1.0.3-11.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libX11-devel-1.0.3-11.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libX11-devel-1.0.3-11.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libXp-1.0.0-8.1.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libXp-1.0.0-8.1.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libXp-devel-1.0.0-8.1.el5.i386.rpm >> rpm.log 2>&1rpm -ivh libXp-devel-1.0.0-8.1.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh libXpm-3.5.5-3.i386.rpm >> rpm.log 2>&1rpm -ivh libXpm-3.5.5-3.x86_64.rpm >> rpm.log 2>&1rpm -ivh libXpm-devel-3.5.5-3.i386.rpm >> rpm.log 2>&1rpm -ivh libXpm-devel-3.5.5-3.x86_64.rpm >> rpm.log 2>&1rpm -ivh make-3.81-3.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh pdksh-5.2.14-36.el5.x86_64.rpm >> rpm.log 2>&1rpm -ivh sysstat-7.0.2-3.el5_5.1.x86_64.rpm >> rpm.log 2>&1rm -rf binutils-2.17.50.0.6-14.el5.x86_64.rpmrm -rf binutils-devel-2.17.50.0.6-14.el5.i386.rpmrm -rf binutils-devel-2.17.50.0.6-14.el5.x86_64.rpmrm -rf compat-db-4.2.52-5.1.i386.rpmrm -rf compat-db-4.2.52-5.1.x86_64.rpmrm -rf control-center-2.16.0-16.el5.i386.rpmrm -rf control-center-2.16.0-16.el5.x86_64.rpmrm -rf control-center-devel-2.16.0-16.el5.i386.rpmrm -rf control-center-devel-2.16.0-16.el5.x86_64.rpmrm -rf gcc-4.1.2-50.el5.x86_64.rpmrm -rf gcc-c++-4.1.2-50.el5.x86_64.rpmrm -rf glibc-2.5-58.i686.rpmrm -rf glibc-2.5-58.x86_64.rpmrm -rf glibc-common-2.5-58.x86_64.rpmrm -rf glibc-devel-2.5-58.i386.rpmrm -rf glibc-devel-2.5-58.x86_64.rpmrm -rf glibc-headers-2.5-58.x86_64.rpmrm -rf glibc-utils-2.5-58.x86_64.rpmrm -rf libstdc++-devel-4.1.2-50.el5.i386.rpmrm -rf libstdc++-devel-4.1.2-50.el5.x86_64.rpmrm -rf libX11-1.0.3-11.el5.i386.rpmrm -rf libX11-1.0.3-11.el5.x86_64.rpmrm -rf libX11-devel-1.0.3-11.el5.i386.rpmrm -rf libX11-devel-1.0.3-11.el5.x86_64.rpmrm -rf libXp-1.0.0-8.1.el5.i386.rpmrm -rf libXp-1.0.0-8.1.el5.x86_64.rpmrm -rf libXp-devel-1.0.0-8.1.el5.i386.rpmrm -rf libXp-devel-1.0.0-8.1.el5.x86_64.rpmrm -rf libXpm-3.5.5-3.i386.rpmrm -rf libXpm-3.5.5-3.x86_64.rpmrm -rf libXpm-devel-3.5.5-3.i386.rpmrm -rf libXpm-devel-3.5.5-3.x86_64.rpmrm -rf make-3.81-3.el5.x86_64.rpmrm -rf pdksh-5.2.14-36.el5.x86_64.rpmrm -rf sysstat-7.0.2-3.el5_5.1.x86_64.rpmrpm -qa|grep binutils >> queryrpm.log 2>&1rpm -qa|grep compat >> queryrpm.log 2>&1rpm -qa|grep control >> queryrpm.log 2>&1rpm -qa|grep gcc >> queryrpm.log 2>&1rpm -qa|grep glibc >> queryrpm.log 2>&1rpm -qa|grep gnome >> queryrpm.log 2>&1rpm -qa|grep libstdc++ >> queryrpm.log 2>&1rpm -qa|grep make >> queryrpm.log 2>&1rpm -qa|grep pdksh >> queryrpm.log 2>&1rpm -qa|grep sysstat >> queryrpm.log 2>&1[[email protected] test]# sh hyll.sh
成功執行,對比前後兩個指令碼,書寫內容上沒有差異。
查看指令碼許可權,完全一樣的兩個指令碼,hyll.sh可以正常執行,而rpm.sh卻不能正常執行。
[[email protected] test]# ls -lltotal 24-rw-r--r-- 1 root root 3855 Sep 17 15:23 hyll.sh-rw-r--r-- 1 1 root root 3942 Sep 17 14:32 rpm.sh
小結:
今天遇到的問題感覺有點奇葩,幾乎相同的兩個指令碼,一個可以執行,一個卻不可以執行。後期又實驗了一次,將指令碼完全一樣的複製了一次(指令碼名稱、內容),沒做任何修改,就是把指令碼重建了一次。重建後的指令碼卻可以執行了。想了下,唯一的區別就是無法執行的指令碼實在WINDOWS上編寫的,新的指令碼實在LINUX上編寫的。問題雖然解決,這個現象還是感覺非常奇怪。
於是帶著好奇,在網上搜了下“ambiguous redirect”的報錯原因,發現很多有關於重新導向符格式的問題。於是想了下,是否是重新導向符號是需要在LINUX下編寫才會正常執行(也就是說LINUX系統對某些特殊操作符比較敏感)。
帶著疑問,開始重新一次實驗。大致思路如下:
在LINUX下將不可執行指令碼修改為可執行檔指令碼(就是在LINUX下重寫貼一遍指令),匯出到WINDOWS下,重新換LINUX平台,將匯出的指令檔重新命名,上傳到實驗平台,驗證指令碼的可用性。經過驗證後發現,通過LINUX平台編輯的指令碼均可以正常執行,指令碼無法執行是由於跨平台書寫格式所導致的。在WINDOWS和LINUX系統下其中對換行等格式都是有細微差別的,因此,今天這個報錯告訴我們,今後修改指令碼要在LINUX系統下完成,完成後再匯入到自己的存放裝置中,以防萬一。
***********************************************聲明**********************************************
原創作品,出自 “深藍的blog” 部落格,歡迎轉載,轉載時請務必註明出處,否則追究著作權法律責任。
表述有錯誤之處,請您留言或郵件([email protected])指明,不勝感激。
本文轉載必須保留此處:http://blog.csdn.net/huangyanlong/article/details/39357927
深藍的blog:http://blog.csdn.net/huangyanlong
***************************************************************************************************
LINUX下奇異的指令碼重編寫,解決指令碼無法執行