これは特に SQL とは関係ないかもしれません。他のコマンドでも同様の動作が実行されるはずです。
この場合、シェルを介してクエリを送信しますが、クエリがどのテーブルにも一致しない場合は、文字通り何も返されず、キャリッジ リターンも返されません。
このような場合に、代わりに0
または がfalse
返されるようにシェルをスクリプト化するにはどうすればよいですか?
問題を引き起こしているサンプル コマンドは次のとおりです。
mysql -u Popey --password='Misses Jono' -s -N --disable-column-names -e
"select term_id from shuttleworth.wp_terms where name = 'nonExistentName' LIMIT 1;"
答え1
-v
詳細モードのオプションを使用すると、より多くの出力が得られるはずです。SQL サーバーを実行していないため、現時点ではこれを試すことはできません。
答え2
いとこがこの解決策を提案してくれました。テストしてみたところ、うまくいきました。
単線:
response=$(mysql -u popey --password='Misses Jono' -s -N --disable-column-names -e "select term_id from shuttleworth.wp_terms where name = 'non-existent-name' LIMIT 1;") && if [ -z "$response" ]; then echo false; else echo $response; fi`
内訳:
response=
$(mysql
-u popey
--password='Misses Jono'
-s -N --disable-column-names
-e
"SELECT term_id
FROM shuttleworth.wp_terms
WHERE name = 'non-existent-name'
LIMIT 1;"
)
&& if [ -z "$response" ];
then echo false;
else echo $response;
fi