2011-07-06 109 views
0

運行一個執行MySQL命令的bash腳本,我在這一行上得到一個錯誤。在bash腳本中運行mysql命令生成錯誤

$MYSQL_BIN $DATABASE -e \ 
"ALTER TABLE `nodes` ADD COLUMN `created_date` int(32) AFTER `address`"; 

該錯誤是CREATED_DATE:找不到

除了在這條線的命令:

$MYSQL_BIN $DATABASE -e \ 
"UPDATE `nodes` SET `created_date` = UNIX_TIMESTAMP() WHERE `created_date` 
IS NULL AND `address` IS NOT NULL"; 
位於第1行

錯誤1064(42000):你有 一個您的SQL語法錯誤;檢查對應於你的MySQL 服務器版本正確的語法附近 使用 手冊「SET = UNIX_TIMESTAMP() WHERE IS NULL和IS NOT NULL」在 線1

我相信第一錯誤是因爲我可能沒有逃脫引號?

+3

使用單引號「」,而不是「」在你的SQL語句,或逃避它。 Bash使用''來內聯執行命令。 – XzKto

回答

4

Bash使用bactick操作符(`)來指示命令替換,即將一個命令的標準輸出替換爲定義另一個命令的文本行。

所以您應該使用單引號,而不是雙者或適當逃避反引號:

$MYSQL_BIN $DATABASE -e 
'ALTER TABLE `nodes` ADD COLUMN `created_date` int(32) AFTER `address`'; 

$MYSQL_BIN $DATABASE -e 
"ALTER TABLE \`nodes\` ADD COLUMN \`created_date\` int(32) AFTER \`address\`"; 
+1

一個人想知道作爲輸出生成的'nodes'命令是什麼。但是,對於您的答案,這不是問題 - 只是在OP的環境中。 –

+0

在標準* NIX(至少Linux)安裝中沒有命名'nodes'的命令,所以輸出很可能是'-bash:nodes:command not found'。 –

+0

我不知道我們是否得到了所有的錯誤信息;也有命令「地址」。很高興知道名稱'節點'沒有標準命令 - 謝謝。 –