$ mysql -e 'select a,b from tablefoo' databasename
daje
+---+---+
| a | b |
+---+---+
| 1 | 0 |
| 2 | 1 |
+---+---+
natomiast
$ mysql -e 'select a,b from tablefoo' databasename > file
zwraca plik file
zawierający
a b
1 0
2 1
(gdzie tabulator znajduje się między znakami alfanumerycznymi w każdym wierszu).
Myślę, że przekierowanie nie powinno zmieniać wyniku. Dlaczego otrzymuję dwa różne wyniki?
Edit: William Jackson „s odpowiedź mówi, że jest to cecha MySQL: format zależy od tego, czy wyjście jest przekierowywane. To jednak nie odpowiada na moje pytanie. Skąd mysql „wie”, czy dane wyjściowe są przekierowywane? Czy przekierowanie nie tylko bierze wynik i cóż, przekierowuje go gdzieś? Czy to nie powinno być niewidoczne dla mysql?
bash
mysql
redirection
stdout
msh210
źródło
źródło
-t
flagę do polecenia mysql :)Odpowiedzi:
Edycja: Nie jestem pewien, jak
mysql
to działa, ale można go użyćisatty(3)
do ustalenia, czySTDOUT
jest to terminal, czy też nie i odpowiednio zmodyfikować dane wyjściowe.Edit 2:
mysql
narzędzie wiersza poleceń na pewno korzystaisatty()
. Możesz przeczytać kod źródłowy.Istnieje kilka dobrych przykładów tego (chociaż nie w
C
) w przepełnieniu stosu:Aby odpowiedzieć na pytanie: „Dlaczego?”: Ponieważ tak mówi dokumentacja. Zobacz instrukcję obsługi :
Podejrzewam, że ta decyzja została podjęta ze względu na czytelność. W przypadku użycia interaktywnego
mysql
można założyć, że człowiek czyta dane wyjściowe, i na ogół łatwiej nam odczytać dane ograniczone tymi wierszami. Przy zastosowaniu nieinteraktywnym zakłada się, że inny program zajmie się wyjściem, a wyjście rozdzielane tabulatorami jest łatwiejsze do wykorzystania programowego.Jeśli chcesz zastąpić to ustawienie domyślne i uzyskać format tabeli ASCII podczas przekierowywania danych wyjściowych, możesz użyć opcji wiersza polecenia
--table
(-t
) :źródło
bash
można go używaćisatty()
tak samo, jak każdego innego programu do określania, czy wskazuje on tty, czy plik na dysku.isatty()
jest dostarczany przez system operacyjny, a nie bash.