پرسش و پاسخ شماره ۶۵ - آموزش اسکریپت نویسی
X
تبلیغات
رایتل

آموزش اسکریپت نویسی

آموزش اسکریپت نویسی پوسته گنو-لینوکس

#!/bin/bash

پرسش و پاسخ شماره ۶۵

پرسش و پاسخ شماره ۶۵

آیا یک دستور "PAUSE" مانند آن که در اسکریپتهای MSDOS هست، در bash وجود دارد؟ که به کاربر اعلام نماید جهت ادامه کلیدی را بزند؟

کُد زیر را برای انتظار تا فشردن کلید اینتر توسط کاربر به کار ببرید:

# Bash
read -p "Press [enter] to continue..."

# Bourne
echo "Press [enter] to continue..."
read junk

یا استفاده از مورد زیر برای منتظر ماندن تا موقعی که کاربر برای ادامه یک ضربه کلید بزند:

# Bash
read -rsn 1 -p "Press any key to continue..."

گاهی اوقات در حالیکه شما از قبل به علت اینکه (به عنوان مثال) در حال استفاده از لوله‌ای برای تغذیه اسکریپت خود می‌باشید، در حال خواندن از ورودی استاندارد هستید، اما لازم است تا فشردن کلیدی توسط کاربر برای ادامه منتظر بمانید. چگونه به read می‌گویید که از صفحه کلید بخواند؟ در اینجا یونیکس به طور قابل انعطافی سودمند است، شما می‌توانید ‎‎"< /dev/tty"‎‎ را اضافه کنید

# Bash
read -rsn 1 -p "Press any key to continue..." < /dev/tty

اگر می‌خواهید مهلت معین برای انتظار قرار بدهید، از گزینه ‎-t‎ برای read استفاده نمایید:

# Bash
printf 'WARNING: You are about to do something stupid.\n'
printf 'Press a key within 5 seconds to cancel.'
if ! read -rsn 1 -t 5
then something_stupid
fi

اگر فقط می‌خواهید مدتی زمانی را بدون اعتنا به ورودی کاربر، متوقف گردد، sleep را به کار ببرید:

echo "The script is tired.  Please wait a minute."
sleep 60

اگر یک شمارش معکوس تفننی برای زمان دار نمودن read می‌خواهید:

# Bash
# .این تابع عدد چند رقمی را نمی‌تواند مدیریت کند
countdown() {
  local i 
  printf %s "$1"
  sleep 1
  for ((i=$1-1; i>=1; i--)); do
    printf '\b%d' "$i"
    sleep 1
  done
}

printf 'Warning!!\n'
printf 'Five seconds to cancel: '
countdown 5 & pid=$!
if ! read -s -n 1 -t 5; then
  printf '\nboom\n'
else
  kill "$pid"; printf '\nphew\n'fi

(اگر این کُد را در پوسته محاوره‌ای به کار ببرید، در اثر سیستم کنترل job موقعی که پردازش فرزند تولید می‌شود و موقعی که کُشته می‌شود، شاهد اختلالی خواهید بود، اما در اسکریپت چنین اختلالی وجود نخواهد داشت.)


پرسش و پاسخ 65 (آخرین ویرایش ‎‎ 2013-04-08 12:28:58‎ توسط geirha)