1

この質問をするのは本当に恥ずかしいのですが、MySQL の出力 (例: ls -l) を STDOUT にリダイレクトし、同時に変数に代入する方法は本当にありますか? 私はこれを試しました:

san@pcjq:~$ exec 5>&1
san@pcjq:~$ SQL=$(mysql -uroot -p mysql -e "SELECT Host,User,Password FROM user;" | tee >(cat - >&5))
Enter password: 
Host    User    Password
127.0.0.1   root    *CD0B39440D9701958FDA10ED6B02E3507DC28EB
%   slvUser *8E6F445A9F0E7AA18DA1D830CC61B5AAC9C606
localhost   root    *CD0B39440D9701958FDA10ED6B02E3507DC28EB
localhost   san *8E6F4A10ED6B00E7AA18DA10EDD830CC61B5AAC9C606
localhost   debian-sys-maint    *1BF46B679FC8911CD06712EC782E446F01201CB7

これは、通常画面に表示される出力の正確な表現ではありません。一方で:

SQL=$(mysql -uroot -p mysql -e "SELECT Host,User FROM user;" >&2)

画面に正しい出力を出力しますが、変数に入ることに注意してください(明らかな理由により)。誰かが回避策を知っていますか?乾杯!!

4

2 に答える 2

2

私自身の質問に答える:

san@pcjq:~$ SQL=$(mysql -uroot -p mysql -t -e "SELECT Host,User FROM user;" \
| tee /dev/tty) && { echo "This is the ECHO:"; echo "$SQL"; }
Enter password: 
+-----------+------------------+
| Host      | User             |
+-----------+------------------+
| %         | slvUser          |
| 127.0.0.1 | root             |
| localhost | debian-sys-maint |
| localhost | root             |
| localhost | santanu          |
+-----------+------------------+
This is the ECHO:
+-----------+------------------+
| Host      | User             |
+-----------+------------------+
| %         | slvUser          |
| 127.0.0.1 | root             |
| localhost | debian-sys-maint |
| localhost | root             |
| localhost | santanu          |
+-----------+------------------+

-t魔法のオプションです。MySQL のマニュアル ページから:

- タブレット

       Display output in table format. This is the default for interactive use, 
       but can be used to produce table output in batch mode.

乾杯!!

于 2013-04-10T22:24:13.677 に答える