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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: aleas در 04 تیر 1391، 10:29 ب‌ظ

عنوان: کد نویسی در ترمینال
ارسال شده توسط: aleas در 04 تیر 1391، 10:29 ب‌ظ
سلام خسته نباشید کسی جواب این سوال میدونه
چگونه میتوان در محیط کدنویسی ترمینال لینوکس متغییری از حالت
readonly
خارج کرد و حذف کرد؟
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: دانیال بهزادی در 05 تیر 1391، 01:44 ق‌ظ
سلام. به دنیای آزاد خوش اومدی
مگه متغیر READONLY می شه؟ ???
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 05 تیر 1391، 09:28 ق‌ظ
ممنون مرسی
بله مثلا در محیط shell script  وقتی یک متغییر محلی تعریف میکنی بطور مثال
a=ali
با دستور unset میتونی متغییر حذف کنی
ولی وقتی متغییر محلی رو به متغییر read-only تبدیل میکنی امکان حذف با این دستور وجود نداره حالا من میخوام بدونم چطور میتونم این متغییر به متغییر محلی برگردونم و حذفش کنم؟

و چطور مستقیم میشه این متغییر حذف کرد
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: آیدین در 05 تیر 1391، 10:46 ق‌ظ
اینجوری که من متوجه شدم به نظرم شما منظورتون alias هست ، با این دستور میتونی برای یه دستور تووی ترمینال یه اسم در نظر بگیری و با دستور unalias اون رو حذف کنی !

برای اطلاعات بیشتر تووی ترمینال بزن man alias

یا به این لینک مراجعه کن :
http://ss64.com/bash/alias.html
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: mohsen-rashidi در 05 تیر 1391، 10:55 ق‌ظ
برای ساختن alias از فرمول زیر استفاده کن:

alias command name='command1;command2;command3;....'
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 05 تیر 1391، 11:11 ق‌ظ
نه بابا این که ارایه است یعنی کسی نمیدونه readonly جی؟
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: alend در 05 تیر 1391، 11:20 ق‌ظ
منظورت این است:
http://www.unix.com/unix-advanced-expert-users/42817-how-unset-readonly-variable.html (http://www.unix.com/unix-advanced-expert-users/42817-how-unset-readonly-variable.html)
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 05 تیر 1391، 11:35 ق‌ظ
بله منظورم همینه با دستور unset نمیشه حذف کرد خطا میده چطور باید به متغییر محلی برگردونم و حذفش کنم چون انگلیسیم خوب نیست از این سایت درست سر در نیودم

خب بجز روش حذف کردن یه روش بگین که متغیر از حالت readonly به حالت قبل که محلی برگردونه فقط به حالت محلی برگردونه حذفش نکنه
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 05 تیر 1391، 02:23 ب‌ظ
دوستان هر کار کردم نشد ببینین خودتون این کارایی میگم بکنین متوجه منظورم میشین تو محیط ترمینال اینارو بنویسین یک

a=ali
echo $a
a=ali2
echo $a
unset a
echo $a


این کد دیدین؟unset چطور متغییر حذف کرد؟حالا این کد انجام بدین

a=ali
echo $a
readonly a
a=ali2
echo $a
unset $a
echo $a



میبینین روش اول میشه مقدار متغییر عوض کرد و حتی متغییر عوض کرد ولی روش دوم مقدار متغییر دگه تغییر نمیکنه و حتی حذف هم نمیشه

من میخواستم بدونم تو روش دوم چطور باید متغییر حذف کنم خواهشا یه نفر راهنمایی کنه؟
تو اون سایت هایی هم دادین هر کار کردم نشد چکار کنم؟
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: alend در 05 تیر 1391، 02:30 ب‌ظ
می گه زمانی که متغیر به صورت readonly در می آید نمی تواند unset شود.
بهترین راه kill کردن shell است یا اجرای دستور در subshell، مثل:
{(b=8; readonly b; echo "-$b-"); b=90; echo "[$b]"; unset b; echo "[[$b]]";}
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: alend در 05 تیر 1391، 03:51 ب‌ظ
سلام. به دنیای آزاد خوش اومدی
مگه متغیر READONLY می شه؟ ???
پس const چیه!
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 05 تیر 1391، 05:06 ب‌ظ
سلام یعنی هیچ راه حلی نیست فقط متغییر بشه حذف کرد؟
خب میشه بگین چطور میشه shell را kill کرد؟
یا کد زیر در subshell وارد کنم اصلا subshell چی؟بنده تازه وارد هستم اگر امکان داره توضیحات بیشتری بدین ممنون میشم چون تازه وارد هستم همینطور توضیح بدین چرا متغییر به readonly تبدیل میکنی هیچ راهی برای حذف کردن متغییر وجود نداره؟و چرا با این دو روشی گفتین میشه حذف کرد؟
{(b=8; readonly b; echo "-$b-"); b=90; echo "[$b]"; unset b; echo "[[$b]]";}
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 05 تیر 1391، 05:16 ب‌ظ
شما مطمن هستین هیچ راهی وجود نداره؟
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 05 تیر 1391، 07:00 ب‌ظ
دوست عزیز متوجه منظورتون شدم منظورتون همون اسکریپت بود ولی این کدی شما دادین اصلا ربطی به readonly نداره بطور مثال شما اینو انجام بدین

(a=10
echo $a)
echo $a
a=20
echo $a
unset a
echo $a

باید خروجی به این شکل باشه
10
10
20
-
ولی به این صورته
10
-
20
-

پس در نیجه ما وقتی این دستور که شما گفتین مینویسیم
(a=10
readonly a
echo $a)
echo $a
a=20
echo $a
unset a
echo $a
در نتیجه اینی شما دادین فقط اون دو خط اول که داخل پرانتز هسته یه کد نویسی جدا حساب میشه چون که بعد پرانتز میبینی مقدار a=10 هسته ولی ما میزنیم a نمایش بده میگه a مقداری نداره یعنی کد نویسی داخل پرانتز جدا حساب میشن من میخوام خود
readonly رو حذف کنم
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 07 تیر 1391، 09:24 ق‌ظ
دوستان هنوز منتظر جوابم این متغییر نمیشه که کلا نشه حذف کرد بلخره یه راه وجود داره راهنمایی کنین لطفا
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: جادی در 07 تیر 1391، 11:32 ق‌ظ
دوستان هنوز منتظر جوابم این متغییر نمیشه که کلا نشه حذف کرد بلخره یه راه وجود داره راهنمایی کنین لطفا

الان سوالت اینه: آیا می شه کاری کرد که متغیری قابل حذف یا تغییر نباشه؟ جوابش هست بله. از دستور readonly استفاده کن.
سوال دوم اینه:‌ آیا می شه اون متغیر رو حذف کرد؟ (:

این دو تا در تناقض با هم هستن. مثل دوستانی که توضیح می دن هر چیزی حتما باید خالقی داشته باشه پس حتما یک چیزی هست که خالقی نداره (: عبارت دوم در تناقض با عبارت اول است (: دستور ریداونلی بنا به تعریف متغیر رو غیرقابل تغییر و غیرقابل unset شدن می کنه. دقیقا هدفش همینه که قابل آنست شدن یا تغییر نباشه پس مشخصه که راهی نیست.

معلومه که می تونی اون شل رو ببندی که از بین بره یا مثلا یکبار دیگه bash رو اجرا کنی که توی شل جدید متغیرهای قبلی نباش. ولی اون متغیر تا وقتی توی اون شل هستی اونجا به تو خیره می شه (:
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 08 تیر 1391، 01:55 ب‌ظ
پس چرا وقتی
(readonly a)
داخل پرانتز میگذارم بعد قابل حذف و ویرایش هسته؟
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: doomhammer65ir در 08 تیر 1391، 02:24 ب‌ظ
چرا میخواهید یک متغیر تنهاخواندنی را پاک کنید یا تغییر بدید ؟
اگر میخواید یک زمانی تغییرش بدید چرا از آغاز تنهاخواندنی تعریفش کردید ؟
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: جادی در 08 تیر 1391، 04:14 ب‌ظ
پس چرا وقتی
(readonly a)
داخل پرانتز میگذارم بعد قابل حذف و ویرایش هسته؟

اینها واقعا سوال عملی هستن؟ مشق هستن؟ چین؟ ((:

وقتی یک چیز رو توی پرانتز می ذاری در اصل توی ساب شل اجرا شده. مثلا می گی (b=4; echo $b) برات می نویسه چهار ولی اگر اکو رو بیاری بیرون مقدار نداره.
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: aleas در 08 تیر 1391، 05:48 ب‌ظ
داداش اره مشق هسته عزیز من که گفتم تازه وارد هستم
میشه راجب ساب شل یه توضیحی بدین؟
عنوان: پاسخ : کد نویسی در ترمینال
ارسال شده توسط: intuxicated در 11 تیر 1391، 02:39 ق‌ظ
من اصلا bashscript و اینجور اسکریپت ها کار نکردم. اما خب با توجه به توضیحاتی که جادی داد ساب شل یعنی یه شل کمکی. بدین معنی که وقتی شما عبارتی رو توی پرانتز می زاری اون عبارت توی یک شل دیگه اجرا می شه و نهایتا خروجیش برگشت داده می شه ؟ حالا نمی دونم برگشت داده می شه یا نه اما توی یک شل دیگه اجرا می شه.
فکر می کنم کاربردش اینجاست که مثلا شما می خوای یه تیکه کد یه کاری رو انجام بده بعد نابود بشه کلا متغیرهاش تا فضای کمتری رو اشغال کنه ؟ یا کدی هست که قرار یک کاری رو انجام بده اما شما نمی خوای بنا به دلایلی روی این شل فعلی کاری رو انجام بده ؟ مثلا جهت افزایش سرعت ؟ من یه همچین برداشتی کردم. اگر اشتباه بود جایی تصحیح کنید لطفا.