انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: ایجاد دستور بصورت پویا در bash (حل شد)  (دفعات بازدید: 1552 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین pronetin

  • Newbie
  • *
  • ارسال: 15
ایجاد دستور بصورت پویا در bash (حل شد)
« : 14 امرداد 1389، 03:23 ب‌ظ »
سلام

من می خواهم یک سری دستورات را بصورت پویا ایجاد کنم.دستوراتی که می خوام اجرا کنم اینا هستند:
cat myfile | cut -d- -f1-5 | grep -v "\-[0-9]"
cat myfile | cut -d- -f1-5 | grep "\-[0-9]" | cut -d- -f1-4 | grep -v "\-[0-9]"
cat myfile | cut -d- -f1-5 | grep "\-[0-9]" | cut -d- -f1-4 | grep "\-[0-9]" | cut -d- -f1-3 | grep -v "\-[0-9]"
cat myfile | cut -d- -f1-5 | grep "\-[0-9]" | cut -d- -f1-4 | grep "\-[0-9]" | cut -d- -f1-3 | grep "\-[0-9]" | cut -d- -f1-2 | grep -v "\-[0-9]"
cat myfile | cut -d- -f1-5 | grep "\-[0-9]" | cut -d- -f1-4 | grep "\-[0-9]" | cut -d- -f1-3 | grep "\-[0-9]" | cut -d- -f1-2 | grep "\-[0-9]" | cut -d- -f1-1 | grep -v "\-[0-9]"

برای ایجاد این دستورات در برنامه ام قطعه کد زیر را نوشته ام:
n=5
while [ $n -ge 1 ]
do
declare -a fnd

#creating cmd to be executed
cmdStr="cat myfile | "
counter=5
cmdStr+="cut -d- -f1-${counter} | "
counter=$(($counter - 1))
while [ $(($counter - $n)) -ge 0 ]
do
cmdStr+="grep \"\-[0-9]\" | "
cmdStr+="cut -d- -f1-${counter} | "

counter=$(($counter - 1))
done

cmdStr+="grep -v \"\-[0-9]\""

printf "To be executed : %s\n" "$cmdStr"

fnd=($($cmdStr))

unset fnd
unset cmdStr
n=$(($n - 1))
done

ولی موقعی که اجرا می کنم، خطای زیر را می دهد:
cat: invalid option -- 'd'
Try `cat --help' for more information.
فکر می کنم مربوط به خط زیر باشد:
fnd=($($cmdStr))

لطفا راهنمایی ام کنید.
« آخرین ویرایش: 21 امرداد 1389، 12:53 ق‌ظ توسط pronetin »

آفلاین heresh

  • Hero Member
  • *
  • ارسال: 968
  • جنسیت : پسر
پاسخ به: ایجاد دستور بصورت پویا در bash
« پاسخ #1 : 14 امرداد 1389، 05:11 ب‌ظ »
یه آرایه به اسم fnd تعریف کردی، می‌خوای به چه شکلی توش ذخیرش کنی؟ کار این آرایه چیه؟

آفلاین fzerorubigd

  • Hero Member
  • *
  • ارسال: 758
  • جنسیت : پسر
  • گوگل دوست خوبیه، فقط باید ازش بپرسی
    • یادداشتهای بیت نیمسوز
پاسخ به: ایجاد دستور بصورت پویا در bash
« پاسخ #2 : 14 امرداد 1389، 05:19 ب‌ظ »
دقیقا همون خطه. اگه بخواید یه رشته رو اجرا کنید، به جای اینکه مستقیما اونو اجرا کنید (مثل شما) یا اینکه با کمک بک تیک (‍`) جواب اون چیزی نیست که میخواید.
به جاش اینطوری بنویسید :
fnd=`eval $cmdStr`
از دستور eval برای همین کار استفاده میشه.(به عبارتی برای اجرای دستورات به صورت پویا )

آفلاین pronetin

  • Newbie
  • *
  • ارسال: 15
پاسخ به: ایجاد دستور بصورت پویا در bash
« پاسخ #3 : 18 امرداد 1389، 01:51 ب‌ظ »
متشکرم از راهنمایتون fzerorubigd

فقط به جای دستوری که شما گفتید، باید از دستور زیر استفاده شود:
fnd=($(eval $cmdStr))
اگر از دستوری که شما گفتید استفاده کنم fnd مقدار داخل '  ' را می گیرد و خروجی دستور را نمی گیرد.

« آخرین ویرایش: 18 امرداد 1389، 01:53 ب‌ظ توسط pronetin »

آفلاین fzerorubigd

  • Hero Member
  • *
  • ارسال: 758
  • جنسیت : پسر
  • گوگل دوست خوبیه، فقط باید ازش بپرسی
    • یادداشتهای بیت نیمسوز
پاسخ به: ایجاد دستور بصورت پویا در bash
« پاسخ #4 : 18 امرداد 1389، 05:05 ب‌ظ »
به دوتا بک تیک در طرفین دستور توجه کردی؟ اونا کاراکتر ' نیستن ها :) در حقیقت گوشه سمت کلید زیر کلید Esc
اونجوری معادل همینه که شما نوشتی.

آفلاین pronetin

  • Newbie
  • *
  • ارسال: 15
پاسخ به: ایجاد دستور بصورت پویا در bash
« پاسخ #5 : 19 امرداد 1389، 12:38 ب‌ظ »
حق با شما است. متشکرم. :)

آفلاین امیر و

  • Hero Member
  • *
  • ارسال: 791
  • جنسیت : پسر
  • Google is your friend
پاسخ به: ایجاد دستور بصورت پویا در bash
« پاسخ #6 : 19 امرداد 1389، 03:28 ب‌ظ »
دوست عزیز، لطفا اگر مشکلت حل شده ،‌در جهت بالا رفتن نظم انجمن،‌به عنوان تاپیک یک "حل شد" اضافه کن.