if文でmysqlコマンドの出力および終了コードを使用する

if文でmysqlコマンドの出力および終了コードを使用する

このスクリプトの冒頭では、ユーザーとユーザーの資格情報を変数として読み込みます。

次のコードは期待どおりに機能し、mysqlユーザーの資格情報を確認します。

lu="test"
lp="test-password"
ldb="local_db"

if mysql -u $lu -p"$lp" $ldb -e "quit"; then
  printf "true"
  return 0;
else
  printf "false"
  return 1;
fi

このコードが実行されると、コマンドラインでパスワードの使用に関するmysql警告が表示されます。 mysqlコマンドの終了コードを評価しながら、出力で警告を抑制したいと思います。

これに回答エラーメッセージ抑制の使用方法に関して、出力はmysqlcommand 2>&1 | grep -v "Warning: Using a password"警告のみを削除します。他のすべての出力は引き続き表示されます。

私はそれを私のコードに統合しようとしましたが、成功しませんでした。私ができる方法はありますか?

ベストアンサー1

はい。問題は、パイプの終了状態がパイプの最後の要素の終了状態であることです。

bashの最新バージョンでは、PIPESTATUS配列を使用して書き込むことができます。

mysqlcommand 2>&1 | grep -v ...
if [ ${PIPESTATUS[0]} -eq 0 ] ; then
    printf "true\n"
    return 0
 else
 ...

より多くのポータブルソリューションが存在します。あなたは実行することができます

( mysqlcommand ; echo $? > lastsqlret ;) 2>&1 | grep ...
if grep '^0$' lastsqlret ; then
...

一時ファイルを使用すると、ファイル記述子操作を使用して一時ファイルを回避できます。

おすすめ記事