چای ۷: اجرای دستورات قبلی در ترمینال


برای اینکه دستوراتی که قبلا توی shell اجرا کردیم رو دوباره اجرا کنیم معمولا history رو نگاه می‌کنیم:

history | grep <search_term>

اما روش‌های راحت‌تری هم برای این‌کار هستن که بررسی می‌کنیم:

تمامی این اپراتور‌ها هم در bash و هم در zsh قابل استفاده هستند.

اجرای دستور قبلی

برای اجرای آخرین دستوری که وارد کردیم می‌تونیم کلید بالا ⬆️ رو بزنیم تا دستور انتخاب بشه، اما اگر بخوایم از دستور قبلی توی دستور فعلی استفاده کنیم، می‌تونیم از از اپراتور !! استفاده کنیم:

هنگام استفاده از کلید بالا ⬆️ اگر وسط نوشتن دستوری باشین، فقط بین دستوراتی که مشابه تا اینجای دستور نوشته شده هستن جستجو می‌کنه؛ برای دیدن دستورات قبلی بدون در نظر گرفتن شباهت از Ctrl+P استفاده کنین.
pacman -S edex-ui
sudo !!
sudo pacman -S edex-ui
یکی از کاربرد‌های زیاد این روش می‌تونه اضافه کردن sudo به ابتدای دستور قبلی باشه.
اجرای دستور قبلی توسط اپراتور !!
اجرای دستور قبلی توسط اپراتور !!


اجرای دستور nام history

از اولین اجرای سیستم دستوراتی که توی ترمینال اجرا می‌شن توی history ذخیره می‌شن که با همین دستور هم لیست اون‌ها رو میشه دید. هرکدوم از این دستورات یک index دارن که همینطور نشون دهنده ترتیب اجرای اون‌ها هم هست. با دونستن شماره یک دستور و با کمک عملگر ! می‌شه اون دستور رو دوباره اجرا کرد:

# history : 105 ping google.com
!105
ping google.com
اجرای دستور nام history
اجرای دستور nام history



جستجو در دستورهای قبلی

جستو با حرف شروع

برای استفاده و اجرا دوباره آخرین دستوری که با حرف مثلا q شروع شده می‌تونیم از اپراتور q! استفاده کنیم:

توجه کنید که q جزو اپراتور نبوده و جای اون هرکدوم از حروف رو می‌تونیم بذاریم.
!s
serve -s . # last command used starting with 's'
جستو با حرف شروع
جستو با حرف شروع


جستجو پویا در تاریخچه دستورات

برای اینکه آخرین دستوری که یک عبارت داخلش استفاده شده، می‌تونیم با استفاده از ترکیب Ctrl+R، جستجو در دستورات قبل رو فعال کرده و عبارت مورد جستجو رو وارد کنیم:

# press Ctrl+R
(zsh)    bck-i-search: _ 
(bash)  (reverse-i-search)`':
برای خارج شدن از این حالت، از Ctrl+G یا Ctrl+Q استفاده کنین.
جستجو پویا در تاریخچه دستورات
جستجو پویا در تاریخچه دستورات



جستجو پویا با استفاده از fzf

fzf یک ابزار جستجوی فازی تحت خط فرمان هست که به کمک اون می‌تونیم خروجی هر دستوری رو به‌صورت فازی جستجو کنیم. می‌تونید fzf رو از مدیر بسته سیستم‌عاملتون نصب کنید.

برای استفاده از fzf برای جستجو در history به‌صورت زیر عمل می‌کنیم:

history | fzf +s --tac
جستجو پویا با استفاده از fzf
جستجو پویا با استفاده از fzf


استفاده از آرگومان‌های دستور قبل

استفاده از آخرین آرگومان دستور قبل

برای تنها استفاده از آخرین آرگومان دستور قبلی می‌تونیم از اپراتور $! استفاده کنیم:

echo arg1 arg2 arg3
cd !$
echo arg3
استفاده از آخرین آرگومان دستور قبل
استفاده از آخرین آرگومان دستور قبل


استفاده از اولین آرگومان دستور قبل

برای استفاده از اولین آرگومان دستور قبلی می‌تونیم از اپراتور ^! استفاده کنیم:

echo arg1 arg2 arg3
cd !^
echo arg1
استفاده از اولین آرگومان دستور قبل
استفاده از اولین آرگومان دستور قبل


استفاده از دستور قبلی بدون آرگومان

برای استفاده از دستور قبلی بدون آرگومان‌هاش می‌تونیم از اپراتور #! استفاده کنیم:

echo arg1 arg2 arg3
cd !#
echo echo
استفاده از دستور قبلی بدون آرگومان
استفاده از دستور قبلی بدون آرگومان


این پست، قسمت هفتم از چای، مجموعه‌ای در باب «چیزی که امروز یادگرفتم» است. باقی چای‌ها رو می‌تونید از اینجا مشاهده کنید و در مورد فلسفه‌ی این کار بخونید.