2013-10-08 2 views
1

Моего Баша: «тестирование» с функцией «запросом»Функции в Баше не работает

#!/bin/bash 
MY_USER="root" 
MY_PASSWORD="my_password" 
MY_BD="my_db" 
MY_HOME="/home/express" 

function query { 
    mysql -e $1 -u $MY_USER --password=$MY_PASSWORD $MY_BD 
} 

case $1 in 
"period") 
    mysql -e "SELECT cron_period()" -u $MY_USER --password=$MY_PASSWORD $MY_BD;; 
"hold") 
    query "SELECT cron_hold()";; 
*) 
    echo "Others";; 
esac 

Тест:

testing period // Working with complete command 
testing hold // Not working with function query, show commands info of MySQL 

Проблема заключается в том, когда с помощью функции запроса, но не знает, как чтобы исправить это.

Любые предложения, пожалуйста?

+1

Может быть, вы хотите процитировать ' $ 1' в двойных кавычках? – kojiro

+0

Спасибо @kojiro, теперь работает! – alditis

+1

http://mywiki.wooledge.org/BashGuide/Practices#Quoting – kojiro

ответ

3

Попробуйте, как этот, т.е., положить $1 в двойных qoutes:

function query { 
    mysql -e "$1" -u $MY_USER --password=$MY_PASSWORD $MY_BD 
} 
+1

Спасибо @Rahul Tripathi, теперь работает! – alditis

+1

Принять и продвинуть готовы, спасибо :) – alditis

4

Попробуйте положить двойные кавычки вокруг $ 1 в вашей функции.

+0

Спасибо @Ben, теперь работает! – alditis

1

Попробуйте это:

функция запроса {

mysql -e ${1} -u $MY_USER --password=$MY_PASSWORD $MY_BD 

}

+0

Не работает для меня в Ubuntu. Благодарю. – alditis

Смежные вопросы