背景:我需要將ksh
腳本從SunOS 5.10移植到RHEL 5.8。它調用isql來檢索一些數據,並且與最終端點客戶端實用程序(如isql)的預期應用程序相反,它會將其解析出來供shell腳本中的變量使用。請注意,我只是繼承了這一點,決不會自己設計這樣的黑客。我肯定永遠不會解析isql以將值賦給shell中的var - 如果腳本需要這些信息,我會使用Perl來處理一些API,比如DBD :: DBI,用於編寫應用程序和數據存儲之間的數據。但我擁有我所擁有的並且必須在參數範圍內工作。同一管道調用isql在Solaris上工作,但不在RHEL上
正在發生的事情是,下面的管道輸入並返回在SunOS但不是在RHEL數據:
echo "SELECT some_field FROM some_table WHERE some_crtra = 'X' \ngo" | isql -U$USER -P$PASS -D$DB -S$SERVER
在Solaris輸出是:
some_field
------
Y
(1 row affected)
從這一點來說,腳本使用awk
只從上面的流中提取字段值,但讓我們忽略它,因爲這不是問題。
另請注意,我能夠分別執行管道命令的數據,即手動進入isql並運行SQL。所以SQL或連接字符串不是問題 - 它可能是管道流數據或isql本身在不同平臺上的不同工作方式。
任何人都可以看到爲什麼對這兩個系統上的相同輸入有不同的響應?任何想法如何改變管道使其工作?
感謝
做到了。你有任何想法,如果不可移植性是由於UNIX或Sybase的版本? – amphibient
這是一個shell問題。從歷史上看,echo有兩個不兼容的實現,這個內置命令的行爲是依賴於系統的。創建printf是爲了提供處理控制字符的便攜方式。答案已更新。 – jlliagre
關閉此修復的章節肯定會開始週末非常的甜蜜......非常感謝您的主席先生 – amphibient