.    

Jak psát MySQL příkazy přímo z shellu

xChaos 25. října 2002 [4373 znaků] [editováno 21. března 2011] [HowKnow]
★★ [ + ] 2 [2x] [ - ]
Zobrazení 21230 ← RSS 15 Facebook 2 Twitter 6 Google 159
Komentářů 4

Inspiroval jsem se patchem Pgbash, umožňujícím volat PostgresQL příkazy přímo z příkazové žádky, a napsal něco podobného pro #MySQL jako jednoduchý #bash skript. Má to ale jednu vadu... #programming #unix
O co jde: článek na Root.cz píše o patchi pro bash, který umožňuje zadávat PostgresQL příkazy přímo z příkazové řádky. Mám pro vás dvě zprávy: jednou dobrou a jednu špatnou.

Ta dobrá následuje vzápětí - napsal jsem trochu podobný hack pro mysql, jako shellový skript, který si můžete buď stáhnout, nebo přečíst, protože má pár řádek:



#!/bin/bash
##Inovative(tm) MySQL(r) command pipe inspired by Pgbash tool.##
## (G)2002 Michael Polak, Arachne Labs.  No rights reserved.  ##
## Install: chmod a+x my; chown root:root my; cp my /usr/bin  ##
function readcfg()
{ read dbusername; read dbpassword; read dbname; }
function savecfg()
{ echo $dbusername; echo $dbpassword; echo $dbname; }
function mymysql()
{ mysql $sw -u $dbusername --password=$dbpassword $dbname; }
sw=-t
if [ "$1" = "-t" ]; then sw=""; shift; fi
if [ "$1" = "-N" ]; then sw=$sw" -N"; shift; fi
cmd=$1
if [ -z $1 ] || [ "$1" = "-?" ] || [ "$1" = "--help" ]; then cmd=h; fi
case $cmd in
h) echo "Usage: my [ -t | -D ] login | connect | close | <MySQL command>"
echo "Example: my select \* from mytable"
echo "         my 'select * from mytable where name="foobar"'"
echo "Note: *, ' and \" are shell characters !!!"
echo ""
echo "my login - prompts for username, password and database"
echo "my connect <username> <password> <database> - automatic login"
echo "my close - deletes .mysqlpiperc file with login data"
echo "-t - disable table format"
echo "-N - disable column headers"
echo ""
echo "Report bugs to <xchaos@arachne.cz>"
;;
login) read -p "MySQL username: " dbusername
read -s -p "MySQL password: " dbpassword
echo; read -p "MySQL database: " dbname
echo quit|mymysql
savecfg>~/.mysqlpiperc
exit
;;
connect)
dbusername=$2; dbpassword=$3; dbname=$4
echo quit|mymysql
savecfg>~/.mysqlpiperc
exit
;;
close)
rm -f ~/.mysqlpiperc || echo ~/.mysqlpiperc was removed.
exit
;;
esac
readcfg<~/.mysqlpiperc
echo "$@"|mymysql

Použití je jednoduché, a hodí se to zejména pro autory PHP skriptů, kteří věčně zapomínají názvy a strukturu svých tabulek v MySQL, jako já:

my login
my show tables
my describe user
my close

Až potud je situace jednoduchá, a podobá se použití např. cvs login, cvs checkout, cvs commit, apod. Horší situace nastane, pokud chcete napsat:

my select * from user

Musíte totiž napsat některou z variant:

my select \* from user
my "select * from user"
my 'select * from user where user="nekdo"' (tohle reší i problém uvozovek...)

Důvodem je skutečnost, že Bash expanduje * už na příkazové řádce, a dělá z ní seznam všech souborů v adresáři. To je sice příjemné, ale u některých příkazů nepohodlné. Podobný problém nastane třeba u scp, pokud byste chtěli napsat "scp server.cz:projekt/* ." - hvězdička se expanduje už pro lokální soubory. Dalším problémem je třeba rename ve stylu DOSu - DOS totiž hvězdičku nexpandoval, takže šlo napsat třeba "ren *.txt *.old"

Řešením by podle mě byla podmíněná expanze speciálních znaků pro některé příkazy - resp. pre-parsování příkazové řádky, které by šlo někde v shellu nakonfigurovat (jestli to jde, prozraďte kde ... a tak mi napadá... ono by to šlo velice jednoduše implementovat jako wrapper pro bash... ;-)

parse-command scp /*:*\*/\\\*/
parse-command my /\*/\\\*/
parse-command ren /\*/\\\*/

Použil jsem jakousi svoji variantu regulárních výrazů - nevím, jestli je hvězdička korektní wildcard pro sed, netestoval jsem to. Myslím si, že by bylo vhodné implementovat to ne jako patch pro každý příkaz zvlášť, ale obecně - podobně, jako existuje třeba patch pro definici Tab autocomplete pro každý příkaz jinak... existuje ale i možnost, napsat jakýsi wrapper pro bash (v ideálním případě opět shellový skript :-), a jednoduše prohnat příkazovou řádku sedem... ještě jsem s tím nelaboroval, ale mělo by to být triviální, takže směle do toho ;-)


Sloupcová sazba: pokud je okno prohlížeče dostatečně velké (na monitoru s dostatečným rozlišením), zobrazí se článek ve více sloupcích (w3.org). Testováno v browserech Firefox, Opera a Chrome. Není implementováno v Internet Exploreru. Tato feature může způsobovat problémy ve starších verzích prohlížečů s jádrem Webkit (Google Chrome, Safari, Konqueror). Pokud nevidíte článek celý, zkuste zmenšit okno prohlížeče nebo použít verzi pro tisk. [zpět na začátek sloupcové sazby]
Pokud se vám článek líbil, zkuste autora podpořit [zobrazit možnosti]
Sdílet v síti [Identi.ca - musíte být předem přihlášeni] [Twitter] [Facebook] [Jagg.cz]
Formátovat pro tisk [bez komentářů] [s komentáři]
Krátká forma URL (adresy) [http://teckacz.cz/93]
Všechny články [od autora xChaos] [v rubrice HowKnow] [nejnovější]

Hodnocení článku čtenáři [ + ] 2 [2x] [ - ]
Tip: Pro moderaci článků (kladné nebo záporné hodnocení) je nutné použít browser, který podporuje javascript a cookies.
Komentáře čtenářů [napsat vlastní]
Skrýt hodnocené nebo méně


[] Coliseum 14. února 2005 ← komentářů 1 1 [1x]
[ + ] 1 [1x] [ - ] [cool[x]]
→ [/-/1141] ← na komentář můžete odpovědět nebo ho sdílet
dd lze vas skript pouzit i pro inserty do db atd ??? dekuji PS: je to presne to co jsem hledal kuji :o)

[] xChaos 14. července 2005 ← komentářů 5513 1 [3047x]
[ + ] 0 [0x] [ - ] ← pro ohodnocení komentáře se není nutné nikde registrovat
→ [/-/1308] ← na komentář můžete odpovědět nebo ho sdílet
Mno, dá se to použít pro libovolné SQL příkazy - jen je potřeba hlídat kolize mezi syntaxí bashe a mysql - tedy zejména znak (hvězdička), která se musí zapsat jako \

[] xChaos 21. března 2011 ← komentářů 5513 1 [3047x]
[ + ] 0 [0x] [ - ] ← pro ohodnocení komentáře se není nutné nikde registrovat
→ [/-/14168] ← na komentář můžete odpovědět nebo ho sdílet
sakra, člověk se vrhne na přidávání syntax highlightingu do 9 let starých článků, jen aby zjistil, že BeautyOfCode se klidně kousne na původním ultra-cool-haxorském triku cat << EOF, kterým jsem v původní verzi používal pro výpis nápovědy :-)

no tak současnou verzi syntax highlighting sice obarví korektně, ale zato je to bez záruky - netestoval jsem to po opravách !

tenhle kód je sice totálně zhulená zbytečná píčovina, odpovídající mému celkovému světnázoru v roce 2002 - ale zase pokud díky tomu někdo pochopí základy programování v Bashi a komunikace unixových příkazů mezi sebou skrze roury, tak proč ne...

[] xChaos 21. března 2011 ← komentářů 5513 1 [3047x]
[ + ] 0 [0x] [ - ] ← pro ohodnocení komentáře se není nutné nikde registrovat
→ [/-/14169] ← na komentář můžete odpovědět nebo ho sdílet
sakra, člověk se vrhne na přidávání syntax highlightingu do 9 let starých článků, jen aby zjistil, že BeautyOfCode se klidně kousne na původním ultra-cool-haxorském triku cat << EOF, kterým jsem v původní verzi používal pro výpis nápovědy :-)

no tak současnou verzi syntax highlighting sice obarví korektně, ale zato je to bez záruky - netestoval jsem to po opravách !

tenhle kód je sice totálně zhulená zbytečná píčovina, odpovídající mému celkovému světnázoru v roce 2002 - ale zase pokud díky tomu někdo pochopí základy programování v Bashi a komunikace unixových příkazů mezi sebou skrze roury, tak proč ne...
 

Počet zobrazených komentářů: 4 [celkový čas potřebný k prohledání databáze a vytvoření stránky: 0.37 sekund]

Pozor, vložením komentáře souhlasíte s pravidly hry TečkyCZ! [zobrazit pravidla] →
Ochrana proti spambotům - tři-krát-tři je ... ? (napište číslicí - nemělo by byt potřeba při zapnutém JavaScriptu)
Sociální síť (přihlaste se předem, 1. řádek<=96 znaků=status, zbytek=odkaz)
Offtopic resolver (týká se odpověď původního tématu, nebo patří jinam?)
Přezdívka (povinně) - nepoužívejte speciální znaky, mezery=podtržítka
E-mail (volitelně) - nebude zobrazen, zobrazí se ikonka z [www.gravatar.com]

Nelze použít HTML [zobrazit mikrosyntax] →

Nápověda: ve vlastním zájmu uvádějte u komentářů pouze funkční a dostupnou e-mailovou adresu. Přezdívku, která je jednou spojená s konkrétní e-mailovou adresou, už nyní nelze bez zásahu administrátora serveru spojit s jinou adresou. Uvedením neplatné e-mailové adresy si v budoucnu znemožníte upload ikonky i možnost použít některé další chystané neanonymní funkce vázané na uvedení platné e-mailové adresy.


TečkaCZ [Nejnovější články] [Nejnovější komentáře] [Zeď vzkazů] [Zeď odkazů] [Začátek článku]

    TečkaCZ
  •  
  • Komentáře →
  • Nástěnky →
  • Debaty →
  • Články →
  • Ročníky →
  • Rubriky →
  • RSS kanály →
  • Vzhled →
  • Ostatní →
  •  
[] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] [] []
  •  
.

[Arachne Labs]

[SPOJE.NET]

[Právě dnes | Tech | Ostatní]

Yacy P2P web search jabber.arachne.cz
tiskové zprávy a otevřené dopisy přebíráme z nejrůznějších informačních kanálů (i bez výslovného souhlasu autorů)
licenční práva k použitým obrázkům a grafickým motivům nejsou definována (přebírejte pouze texty bez obrázků)
texty článků i komentáře bez uvedení copyrightu jsou chráněny GNU Free Documentation License
založeno na Quzo engine, (G)1999-2002 David Čermák, (G)2002-2012 Michael Polák
Quzo engine vyvíjejí Arachne Labs, webhosting sponzorují SPOJE.NET
seznam aktuálních článků je dostupný i ve formátu RSS (XML)
můžete také sledovat Twitter feed TečkyCZ.
test XHTML a CSS2 validity