<?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>corelist.net &#187; Bash</title>
	<atom:link href="http://weblog.corelist.net/category/bash/feed/" rel="self" type="application/rss+xml" />
	<link>http://weblog.corelist.net</link>
	<description>وبلاگ شخصی علی ستاری</description>
	<lastBuildDate>Tue, 06 Dec 2011 16:53:12 +0000</lastBuildDate>
	<language>fa</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>چگونه با Bash شاد کام باشیم (۲)</title>
		<link>http://weblog.corelist.net/archives/1387/07/16/bash-special-characters/</link>
		<comments>http://weblog.corelist.net/archives/1387/07/16/bash-special-characters/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 18:01:04 +0000</pubDate>
		<dc:creator>علی ستاری</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[لینوکس]]></category>
		<category><![CDATA[cli]]></category>
		<category><![CDATA[pipe]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://weblog.corelist.net/?p=86</guid>
		<description><![CDATA[یا علایم خاص در Bash در قسمت قبل به بحث completion در Bash پرداختیم. این بار بحث شیرین Special Characters را خواهیم داشت. کاراکترهای خاص برای ایجاد قابلیتها و کاربردهای خاصی طراحی شدند که در امور روزمره کار با shell و همچنین در داشتن shell scriptهای بهینه‌تر به ما کمک میکنند. Pipe (&#124;) این کاراکتر [...]]]></description>
			<content:encoded><![CDATA[<p>یا <strong><abbr title="Special Characters">علایم خاص</abbr> در Bash</strong></p>
<p>در قسمت قبل به بحث <a href="http://weblog.corelist.net/archives/1386/06/01/bash-completion/">completion در Bash</a> پرداختیم. این بار بحث شیرین Special Characters را خواهیم داشت. کاراکترهای خاص برای ایجاد قابلیتها و کاربردهای خاصی طراحی شدند که در امور روزمره کار با shell و همچنین در داشتن shell scriptهای بهینه‌تر به ما کمک میکنند.</p>
<p><a title="Pipe in Unix" href="http://en.wikipedia.org/wiki/Pipe_(Unix)"><strong>Pipe (|)</strong></a><br />
این کاراکتر (که با Shift+\ قابل دسترسیه) همونطور که از اسمش پیداست کار ارتباطی انجام میده، به این شکل که با استفاده از pipe میشه خروجی (stdout) یک دستور رو به دستور بعدش فرستاد. کاربرد این موضوع زمانی هست که بخواید داده‌ای رو با استفاده از چند دستور یا برنامه پردازش کنید و خروجی فیلتر شده یا متفاوتی داشته باشید.<br />
مثال ساده: برای دیدن یک پروسه خاص از لیست پروسه‌ها:</p>
<blockquote><p><code>ps aux | grep apache2</code></p></blockquote>
<p>دستور ps با پارامترهای داده شده فهرستی از پروسه‌های فعال در سیستم به ما میده. این فهرست معمولا طولانی هست. دستور grep هم عبارت داده شده رو داخل خطوط یک فایل یا ورودی پیدا میکنه و کل خط رو برمیگدونه. حالا نتیجه ترکیب این دو دستور با pipe اینه که خطوط حاوی عبارت apache2 از بین لیست طولانی پروسه‌ها جدا میشه و نمایش داده میشه. Pipe میتونه به تعداد نامحدودی در یک دستور خطی استفاده بشه:</p>
<blockquote><p><code>cd /home; du --max-depth=1 ./ | sort -nr | head | awk '{ print $2 }' | cut -d/ -f2</code></p></blockquote>
<p>که این دستور لیست 10 شاخه‌ای که بیشترین فضا رو در شاخه home اشغال کردند نمایش میده.</p>
<p><a title="Redirections in Unix shell" href="http://en.wikipedia.org/wiki/Redirection_(Unix)#Redirecting_standard_input_and_standard_output"><strong>ًRedirections (&gt;,&lt;,&gt;&gt;)</strong></a><br />
این کاراکترها برای تغییر مسیر ورودی (stdin) و خروجی (stdout) و یا حتی خطاها (stderr) کاربرد دارند. برای مثال میتونید از یک فایل حاوی داده به عنوان ورودی استفاده کنید و بعد از پردازش لازم نتیجه رو در فایل دیگه‌ای ذخیره کنید یا به انتهاش اضافه (append) کنید.<br />
کاراکتر &gt; برای استفاده از محتویات یک فایل (معمولا متنی) به عنوان ورودی (stdin) استفاده میشه. کاراکتر &lt; برای ذخیره خروجی (stdout) یک دستور در یک فایل و کاراکتر &lt;&lt; برای append کردن خروجی به انتهای فایل استفاده میشه.<br />
برای مثال از فایلی به نام &#8216;results&#8217; حاوی لیست نمرات و اسامی دانش‌آموزان سطرهایی حاوی عبارت ali را جدا کرده و در فایل list ذخیره میکنیم:</p>
<blockquote><p><code>sort -nr &lt; results | grep -in ali &gt; list</code></p></blockquote>
<p>از این کاراکترها برای تغییر مسیر stdout به stderr و بالعکس هم میشه استفاده کرد، مثلا برای دستوراتی که به طور خودکار (مثلا cron) اجرا میشند گاهی این کار انجام میشه:</p>
<blockquote><p><code>some_command 2&gt;&amp;1 &gt;&gt; /var/log/command_output</code></p></blockquote>
<p><a title="Tilde Expansion" href="http://www.faqs.org/docs/bashman/bashref_28.html"><strong>Tilde (~)</strong></a><br />
این کاراکتر همواره به شاخه خانگی (home directory) کاربر فعلی (که شما دارید باهاش کار میکنید یا دستور به نام اون اجرا میشه) اشاره میکنه. در مسیر دادن به کار میاد:</p>
<blockquote><p><code>cd ~/projects → cd /home/ali/projects</code></p></blockquote>
<p><span id="more-86"></span><br />
<a title="Command Substitution" href="http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_04"><strong>Backticks (`)</strong></a><br />
وقتی عبارتی داخل این دو تا backtick قرار بگیره اجرا میشه و خروجیش مثل یک string به محیط bash برگردونده میشه. خاصیتش برای حالتیه که میخواید یک دستور (یا دستوراتی) اجرا بشه و نتیجه رو در دستور دیگه‌ای استفاده کنید. (بیشتر ممکنه برای shell scriptها کاربرد داشته باشه)<br />
مثلا تمام فایلهایی که با temp شروع میشند رو حذف میکنیم:</p>
<blockquote><p><code>rm -f `ls /home/ali/temp*`</code></p></blockquote>
<p>اینجا اول دستور ls اجرا میشه و لیست فایلها به صورت یک رشته به دستور rm برمیگرده.</p>
<p><strong>Semicolon (;)</strong><br />
برای جدا کردن دستورات از semicolon استفاده میشه. به این شکل که زمانی که میخواید چند دستور رو پشت سر هم در یک خط اجرا کنید باید انتها هر دستور یک semicolon بگذارید.<br />
مثلا بعد از وارد کردن این دستور با تاخیر 7 ثانیه دستور import برای تصویربرداری بخشی از صفحه اجرا میشه:</p>
<blockquote><p><code>sleep 7; import ~/screenshot_`date "+%Y-%m-%d"`.png; echo 'screenshot saved!'</code></p></blockquote>
<p><strong>Ampersand (&amp;)</strong><br />
این کاراکتر در انتهای دستور باعث میشه دستور بعد از اجرا به Background بره و کارشو ادامه بده. (به Job Control مربوط میشه) مثلا زمانی که میخواید یک پروسه طولانی مدت اجرا کنید که نیاز به تعامل نداره میتونید به Background بفرستید و به کارتون ادامه بدید:</p>
<blockquote><p><code>scp -rq /backup/daily/ user@server2:/media/backup &amp;</code></p></blockquote>
<p>مواردی که در این مقاله بهشون اشاره شده پرکاربردترین کاراکترهای خاص در کاربرد عمومی bash هستند. برای مطالعه بیشتر و مشاهده لیست کاملی از کاراکترهای خاص و کاربردشون به اینجا مراجعه کنید:<br />
<a title="از سایت فخیمه‌ی tldp.org" href="http://tldp.org/LDP/abs/html/special-chars.html">Advanced Bash-Scripting Guide: Chapter 3. Special Characters</a><br />
در این مطلب به مسایلی مثل <a title="Job Control in UNIX" href="http://en.wikipedia.org/wiki/Job_control_(Unix)">Job Control</a>، Shell Script و <a title="Standard streams" href="http://en.wikipedia.org/wiki/Standard_streams">Standard Streams</a> و همچنین دستوراتی مثل awk، date، scp و &#8230; اشاره شد که چون ربطی به موضوع اصلی نداشتند توضیح بیشتری داده نشد. بله، میدونم که اغلب این موارد منحصر به bash نیست و در خیلی از shellهای دیگه هم کاربرد داره. ولی shell پایه اینجا bash فرض شده.</p>
<p>پ.ن: با تشکر از تذکر آیین‌نامه‌ای برادر <a href="http://oxygenws.com/blog/">متقی</a>، And به Ampersand تغییر کرد. <img src='http://weblog.corelist.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.corelist.net/archives/1387/07/16/bash-special-characters/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>چگونه با Bash شاد کام باشیم (۱)</title>
		<link>http://weblog.corelist.net/archives/1386/06/01/bash-completion/</link>
		<comments>http://weblog.corelist.net/archives/1386/06/01/bash-completion/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 05:10:46 +0000</pubDate>
		<dc:creator>علی ستاری</dc:creator>
				<category><![CDATA[Bash]]></category>
		<category><![CDATA[لینوکس]]></category>

		<guid isPermaLink="false">http://weblog.corelist.net/archives/1386/06/01/%da%86%da%af%d9%88%d9%86%d9%87-%d8%a8%d8%a7-bash-%d8%b4%d8%a7%d8%af-%da%a9%d8%a7%d9%85-%d8%a8%d8%a7%d8%b4%db%8c%d9%85-1/</guid>
		<description><![CDATA[یا completion در Bash اصولا webmaster یا sysadminهای لینوکسی روزانه سر و کار زیادی با shell دارند. یکی از shellهای پرکاربرد و محبوب و نسبتا کامل برای خاندان یونیکس bash هست. bash مخفف born again shell یا shell خیلی باحال میشه! اطلاعات بیشتر راجع به bash اینجا هست: http://en.wikipedia.org/wiki/Bash کار کردن با شل قلق ها [...]]]></description>
			<content:encoded><![CDATA[<p>یا <strong>completion در Bash</strong></p>
<p>اصولا webmaster یا sysadminهای لینوکسی روزانه سر و کار زیادی با shell دارند. یکی از shellهای پرکاربرد و محبوب و نسبتا کامل برای خاندان یونیکس bash هست. bash مخفف born again shell یا shell خیلی باحال میشه! <img src='http://weblog.corelist.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
اطلاعات بیشتر راجع به bash اینجا هست: <a href="http://en.wikipedia.org/wiki/Bash">http://en.wikipedia.org/wiki/Bash<br />
</a><br />
کار کردن با شل قلق ها و ترفندها و به قولی short handهای زیادی داره، که اگر بدونیم خیلی شیرین و لذت بخش و سریع خواهد بود! اغلب علت اینکه تازه کارهای بی تجربه از شل و ترمینال و &#8230; بدشون میاد (یا حتی میترسند) وارد نبود به این ریزه کاریها و نکته هاست.</p>
<p>یکی از نکات کنکوری کار کردن با اکثر ترمینال ها استفاده از قابلیت completion هست. این قابلیت کما بیش توی اکثر محیطهای متنی دیده میشه&#8230; حتی cmd ویندوز هم داره .. ولی خیلی ناقص و فقط در حد شاخه‌ها و اسم فایلها! این قابلیت برای تکمیل عبارات و کلمات مربوط به دستورها یا نام شاخه ها عموما به کار میره (میتونه فراتر از اینها هم باشه!)<br />
کلیدی که عموما کار کامل کردن رو انجام میده TAB هست. مثلا شما فایل هایی به این شکل در یک شاخه دارید:</p>
<blockquote><p><code>.<br />
..<br />
linux-2.0-5.2.687.tar.gz<br />
linux-3.0-5.2.687.tar.gz<br />
linux-2.1-5.2.687.tar.gz<br />
linux-2.5-5.2.687.tar.gz<br />
linux-4.0-5.2.687.tar.gz<br />
ali.tar.gz</code>
</p></blockquote>
<p>حالا مثلا میخواید با دستور cp یکی از اینها (فرضا linux-2.5-5.2.687.tar.gz) رو کپی کنید، به این شکل میتونید از completion استفاده کنید:</p>
<blockquote><p><code>cp l(TAB)<br />
که میشه<br />
cp linux-</code><br />
<code><br />
cp linux-2(TAB)<br />
که میشه<br />
cp linux-2.</code><br />
<code><br />
cp linux-2.5(TAB)<br />
که اینبار کامل میشه:<br />
cp linux-2.5-5.2.687.tar.gz</code></p></blockquote>
<p>مرحله اول ما دستور cp رو تایپ کردیم و بعد از حرف &#8220;L&#8221; کلید TAB رو یکبار زدیم، bash چک میکنه و میبینه توی این شاخه 5 تا فایل هست که با &#8220;L&#8221; شروع میشند که وجه اشتراک همشون <code>-linux</code> هست. پس خودش تا کاراکتر &#8220;-&#8221; که بین همه L دارها مشترکه پیش میره. بعد که ما عدد 2 رو هم وارد کردیم چک کرد و دید 3 تا گزینه مونده و اشتراکشون &#8220;.&#8221; هست. اینهم کامل کرد. وقتی ما عدد 5 رو وارد کردیم دیگه مورد مشابهی که با linux-2.5 شروع بشه وجود نداشت.. در نتیجه کل نام فایل رو برامون آورد. به این میگند completion!<br />
حالا اگر بخواید فایل ali.tar.gz رو انتخاب کنید کافیه حرف a رو تایپ کنید و TAB رو بزنید! اسم فایل کامل میشه! چون دیگه هیچ فایلی با a شروع نشده.</p>
<p>حالا این روال برای دستورات هم وجود داره. میتونید کامندهای طولانی رو هم اینطوری کوتاه کنید. مثلا برای دستور traceroute (مثلا) کافیه tra و TAB و بعد ro و TAB رو بزنید&#8230; کامل میشه! برای دیدن لیست فایلها یا دستورات که با عبارت وارد شده شما شروع میشند باید دوبار TAB رو بزنید.</p>
<p>استفاده از همین تکنیک کوچیک توی کارهای روزانه و خصوصا برای کار در شاخه های مختلف با اسمهای نسبتا طولانی خیلی دستمون رو باز میکنه.</p>
<p>این دو مقاله در همین مورد هست:<br />
<a href="http://www.debian-administration.org/articles/316">http://www.debian-administration.org/articles/316</a><br />
<a href="http://www.debian-administration.org/articles/317">http://www.debian-administration.org/articles/317</a></p>
<p>توی مقاله دوم میتویند ببینید که این قابلیت چقدر انعطاف پذیره و میتونید برای خودتون قوانین و توابع completion دلخواه داشته باشید!</p>
<p>پ.ن: تیتر مطلب از نشریات زرد الهام گرفته شده، جدی نگیرید! <img src='http://weblog.corelist.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://weblog.corelist.net/archives/1386/06/01/bash-completion/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

