web-dev-qa-db-ja.com

Makefileで `read`コマンドが機能しない

3つのタスクを実行するmakeスクリプトがあります。

  1. MySQLデータベースをインポートする
  2. 構成ファイルを移動する
  3. 構成ファイルを構成する

これらのタスクでは、スクリプトに3つの入力が必要です。

  1. MySQLホスト
  2. MySQLユーザー名
  3. MySQLパスワード

何らかの理由で、入力をreadするたびに正しい変数に保存されますが、内容は最初の文字なしで保存した変数名です。なぜそうなのか、私にはわかりません。

これがMakefileです。

Shell := /bin/bash

default:
        @echo "Welcome!";\
        echo -n "Please enter the MySQL Host (default: localhost):";\
        read Host;\
        Host=${Host:-localhost};\
        echo -n "Please enter the MySQL username:";\
        read username;\
        echo -n "Please enter the MySQL password:";\
        read -s password;\
        mv includes/config.php.example includes/config.php 2>/dev/null;true;\
        sed 's/"USER", ""/"USER", "$(username)"/g' includes/config.php > includes/config.php;\
        sed 's/"PASSWORD", ""/"PASSWORD", "$(password)"/g' includes/config.php > includes/conf$
        echo $username;\
        echo $password;\
        mysql -u "$username" -p"$password" codeday-team < ./codeday-team.sql;\
        echo "Configuration complete. For further configuration options, check the config file$
        exit 0;

出力は次のとおりです。

Welcome!
Please enter the MySQL Host (default: localhost):
Please enter the MySQL username:<snip>    
Please enter the MySQL password:sername
assword
ERROR 1045 (28000): Access denied for user 'sername'@'localhost' (using password: YES)
Configuration complete. For further configuration options, check the config file includes/config.php

ご覧のとおり、sernameasswordが出力されます。私の人生ではこれは直せません!

この投稿の目的はreadバグを解決することですが、アドバイス、バグレポート、または提案をいただければ幸いです。私は彼らに賞金を授与するかもしれません。

助けてくれてありがとう!

4
Aaron Esau

makefileの機能を使用していない場合、それらの行を単一のシェルで記述してみませんか?

次に使用するMakefileで

    echo $username;\
    echo $password;\

makeは$username$u(空の変数)+ sername(文字列)として解析します

makefileにとどまりたい場合は、$username$$usernameに置き換えてみてください。

5
Archemar