質問: port forwardingを使って、リモートでMySQLにアクセスする方法について質問させていただきます。 以下に簡単なdemo script(demo.sh)を作成しました。 ``` echo $1; echo $2; echo "$HOME/local/bin/mysql -u user -D WB -h$1 --port=$2" (<-ここのコマンドは正常に動きます。) query() { $HOME/local/bin/mysql -u user -D WB -h$1 --port=$2 } query "begin;\ #some command for MySQL commit;" ``` OSはubuntu16.04を使って、portの番号を13306に設定しております。 ``` bash demo.sh xxxx 13306 (xxxは実際のIP addressです。) ``` とタイプしますと、 mysql: [ERROR] /home/user/local/bin/mysql: Empty value for 'port' specified というエラーが出てきます。 自分の理解では、portの番号が指定されていないことがエラーの原因だと思います。 しかし、3番目のechoの結果を、直接terminalにコピペしますと、正常にMySQLにアクセスできます。このことより、コマンド自体は問題ないと考えております。 質問ですが、bash scriptではEmpty value for 'port' specifiedとなってしまっている部分を、何とかport番号を指定する方法はありますでしょうか? ーPオプションも試してみましたが、問題は解決しませんでした。 もし何方かご存知でしたら、ご教授をお願いします。 何卒宜しくお願い致します。
回答: 3行目のechoコマンドを query() の中に移動してみれば原因がわかると思います。 関数内の $1 $2 等は、関数外の値を引き継ぎません。関数呼び出し時に与えられた引数になります。 今回のスクリプトの場合は $1 は "begin;~" の文字列になり、$2 は空になります。