一個有點深度的shell BUG除錯
這個bug花了我一整天的功夫,最後還是在別人幫助下解決了。
雖然費這麼多時間和當初輕視它有關,這個錯誤本身也有點奇怪了。
[@more@]為了說明問題,新寫了一個測試程式
資料庫裡有表aa,
SQL> desc aa
Name Type Nullable Default Comments
---- ------------ -------- ------- --------
COL1 VARCHAR2(10) Y
SQL> select * from aa;
COL1
----------
b
a
shell指令碼內容:
/export/home/deverdb/p482/scripts>cat test1
#!/usr/bin/bash
DB_CHAR=`sqlplus -s edentest/edentest@perdb<
SET TERM OFF
SET FEED OFF
SELECT col1 FROM aa WHERE rownum<2;
EOF`
echo $DB_CHAR
export DB_CHAR
sqlplus edentest/edentest@perdb<
execute dbms_output.put_line('before');
execute dbms_output.put_line('$DB_CHAR');
exit;
EOF
執行過程和錯誤:
/export/home/deverdb/p482/scripts>test1
b
SQL*Plus: Release 8.1.7.0.0 - Production on Tue Dec 14 09:05:14 2004
(c) Copyright 2000 Oracle Corporation. All rights reserved.
Connected to:
Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
SQL> SQL> before
PL/SQL procedure successfully completed.
SQL> ERROR:
ORA-01756: quoted string not properly terminated
SQL> SP2-0042: unknown command "b')" - rest of line ignored.
SQL> Disconnected from Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production
究其原因,是因為 DB_CHAR 從 sql*plus 取得值,又將值作為引數傳入儲存過程時,DB_CHAR 的值(字串)前面多了一個回車符。
加上語句:
SQLSTR="dbms_output.put_line('${DB_CHAR}')"
echo $SQLSTR
可以看到返回的SQLSTR值為 dbms_output.put_line(' b'),注意b前面有空格,其實是個回車符。在sql*plus執行時,該語句就成了
SQL>dbms_output.put_line('
SQL>b')
所以出現了執行時的錯誤資訊。
解決:在 DB_CHAR賦值後加如下語句 DB_CHAR = `echo $DB_CHAR|sed -e "s/^n//"` 將前面的回車符去掉。
但是為什麼會有那個回車符,目前尚不明瞭中。
還企望高手解答。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/207/viewspace-784471/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- phpstorm + xdebug 斷點除錯PHPORM斷點除錯
- godebug:一個跨平臺的Go程式除錯工具Go除錯
- 【Java】Debug斷點除錯常用技巧Java斷點除錯
- Windows PHPstorm xdebug 斷點除錯WindowsPHPORM斷點除錯
- Shell除錯有什麼技巧?Linux運維除錯Linux運維
- 22 真機除錯bug(除錯包)除錯
- VS Code + Homestead + Xdebug 斷點除錯配置斷點除錯
- 斷點除錯 debug模式 1006斷點除錯模式
- phpstorm+xdebug遠端斷點除錯PHPORM斷點除錯
- Debug---Eclipse斷點除錯基礎Eclipse斷點除錯
- nodejs的除錯debugNodeJS除錯
- AS之Debug除錯除錯
- IsDebuggerPresent的反除錯與反反除錯除錯
- Zend Studio整合Xdebug斷點除錯詳解斷點除錯
- shell 指令碼的除錯問題指令碼除錯
- 除錯的第一個Jdon出錯資訊除錯
- DebugView 除錯入門View除錯
- [BUG反饋]除錯模式下函式U()的BUG除錯模式函式
- 記一次靈異般的 Bug 除錯經歷除錯
- Windows windbg kernel debug 雙機核心除錯 - USB3.0 除錯 USB除錯 除錯線Windows除錯
- 除錯工具Firebug的使用方法除錯
- 最難忘的Bug除錯經歷除錯
- MySQL UDF的除錯方式 - debugview (轉)MySql除錯View
- 可以雙向除錯的debugger除錯
- Jmeter除錯工具---Debug SamplerJMeter除錯
- MyEclipse下debug除錯Eclipse除錯
- debug技巧之本地除錯除錯
- 總結一篇shell除錯技巧及常見的指令碼錯誤除錯指令碼
- Laravel 一個簡單的除錯工具Laravel除錯
- Pycharm的斷點除錯PyCharm斷點除錯
- AS斷點除錯斷點除錯
- Homestead 下關於 PhpStorm Xdebug 斷點除錯工具的安裝PHPORM斷點除錯
- SSH框架之Hibernate的查詢詳解(1)、debug斷點除錯框架斷點除錯
- LLDebugTool – 便捷的IOS除錯工具(Version 1.1.5)iOS除錯
- LLDebugTool - 便捷的IOS除錯工具(Version 1.1.3)iOS除錯
- LLDebugTool - 便捷的IOS除錯工具(支援Swift)iOS除錯Swift
- LLDebugTool - 便捷的IOS除錯工具(Version 1.1.5)iOS除錯
- 13 年的 Bug 除錯經驗總結除錯