<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Perlover&#039;s Blog &#187; shell</title>
	<atom:link href="http://blog.perlover.com/tag/shell/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.perlover.com</link>
	<description>Blog about Unix, Perl, Firefox, JavaScript and other internet technologies</description>
	<lastBuildDate>Fri, 20 Jan 2012 15:23:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>readline команды (MySQL, bash, rlwrap)</title>
		<link>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/</link>
		<comments>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 15:21:00 +0000</pubDate>
		<dc:creator>Perlover</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[shortcut keys]]></category>

		<guid isPermaLink="false">http://blog.perlover.com/?p=589</guid>
		<description><![CDATA[Данная статейка уже носит чисто профессиональный характер &#8212; она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке. Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не [...]]]></description>
			<content:encoded><![CDATA[<p>Данная статейка уже носит чисто профессиональный характер &#8212; она для тех, кто работает в Unix и работает в bash, tcsh шеллах, а также работает с MySQL. Сейчас я расскажу о нескольких очень полезных «горячих» клавишах для работы в командной строке.</p>
<p><span id="more-589"></span>Если вы работаете раз от разу в bash, tcsh и других shell-ах, вы можете не знать про следующие, но очень удобные команды, которые облегчать вам жизнь под Unix:</p>
<ul>
<li><strong>Ctrl + A</strong> &#8212; переход <strong>в начало</strong> текущей строки;</li>
<li><strong>Ctrl + E</strong> &#8212; переход <strong>в конец</strong> текущей строки;</li>
<li><strong>Стрелка вверх / Стрелка вниз </strong>- <strong>хождение по history </strong>командам соответственно к более старым командам / к более новым (это вы навярняка знаете)</li>
<li><strong>Ctrl + U</strong> &#8212; <strong>стирает все слева </strong>от текущей позиции курсора, то есть чтобы быстро очистить строку, можно сделать Ctrl + E и затем Ctrl + U</li>
<li><strong>Esc -&gt; d</strong> &#8212; стирает слово справа (сначала нажимаем Esc, отпускаем, затем &#8216;d&#8217;)</li>
<li><strong>Tab </strong>- формирует законченный вид не до конца набранной команды, файла или директории. Для MySQL -  еще таблицы, имени колонки. Если нет однозначности, то после повторного нажатия <em>Tab </em>выдаются варианты. Очень ускоряет процесс работы в командной строке, если вы не знали про это <img src='http://blog.perlover.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </li>
<li><strong>Ctrl + PageDown </strong>- переход <strong>к самой последней</strong> (свежей) команде в history</li>
<li><strong>Ctrl + PageUp </strong>- переход <strong>к самой старой</strong> (первой) команде history</li>
<li><strong>Ctrl + R </strong>- самая ценная команда для меня &#8212; <strong>поиск в history</strong>. Делается так: нажимаем Ctrl + R, появляется приглашение ввести подстроку поиска ( (reverse-i-search)`&#8217;: ), далее мы вводим, например, «mysql» &#8212; видим самую последнюю команду shell-а, где встречалось подстрока «mysql». Если она нас не устраивает, то для повтора поиска тут же надо снова нажать Ctrl + R. Каждое нажатие Ctrl + R перемещает нас к более старым командам с подстрокой «mysql», которые мы когда либо исполняли. Если же нас найденная команда устраивает, нажимаем «Стрелка вправо» или «Стрелка влево» и приступаем к редактированию и исполнению команды. Это очень удобная и нужная команда!</li>
</ul>
<p><strong>Все эти команды &#8212; подмножество</strong> команд библиотеки <strong><a href="http://ru.wikipedia.org/wiki/Readline" target="_blank">readline</a></strong> (man 3 readline). Ее используют и другие программы, например MySQL. Но в MySQL есть то ли баг, то ли так задумано разработчиками. Суть ее в том, что MySQL версий 3.x, например, прекрасно исполнял команду поиска (Ctrl + R), но потом, по каким то причинам, новые релизы &#8212; MySQL 4.x &amp; 5.x перестали работать с поиском. Скорее всего, это связано с тем, что раньше MySQL использовал readline библиотеку, но потом разработчики перешли на <a href="http://linux.die.net/man/5/editrc" target="_blank">editline</a>. И последняя перестала работать с поиском. Я долго мучался, пока не нашел решение. Оно следующее:</p>
<p>Создать файл ~/.editrc &#8212; конфиг для editline. Там мы пишем следующие строки:</p>
<pre class="brush: plain; title: ; notranslate">
bind &quot;\e[3~&quot; ed-delete-next-char
bind &quot;^R&quot; em-inc-search-prev
</pre>
<p>После этого в MySQL 4.x &amp; 5.x у нас будет работать Ctrl + R.</p>
<p>Другим решением для MySQL вместо редактирования .editrc будет использовать <strong><a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/" target="_blank">rlwrap</a></strong> программу (установка в Linux Fedora Core, например, такая: <em>yum install rlwrap</em>) &#8212; она «обертывает» stdout запускаемой программы и создает history для вводимых строк (хранит в ~/.commandname_history). У нее есть некоторые недостатки &#8212; на ввод паролей она делает echo, то есть пароль будет виден на экране. Можно с помощью опций отключить это, но это не идеально. Зато можно в нее обернуть любую программу, которая даже не имеет history вообще (<em>rlwrap perl -MCPAN -e shell</em> , например). Итак, второе решение для MySQL может быть таким:</p>
<blockquote><p>alias mysql=&#8217;rlwrap -a mysql&#8217;</p></blockquote>
<p>Это ставиться в ~/.bashrc, например. Или вместо алиаса можно просто запустить:</p>
<blockquote><p>rlwrap -a mysql -uroot -p mysql</p></blockquote>
<p><strong><a href="http://utopia.knoware.nl/~hlub/uck/rlwrap/rlwrap.html" target="_blank">Man на rlwrap</a></strong> вы можете найти на сайте разработчика.</p>
<p>Вот такие вот тонкости, которые на 100% облегчат вам работу в Unix.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.perlover.com/2009/12/02/readline-bash-mysql-rlwrap/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

