لطفا وارد شوید یا ثبت‌نام کنید تا به انجمن‌ها دسترسی کامل داشته باشید.



 
امتياز موضوع :
  • 0 رأي - معدل امتيازات : 0
  • 1
  • 2
  • 3
  • 4
  • 5
space in script
2011-05-14, 09:52 AM,
ارسال : #1
space in script
سلام
من دارم یک اسکریپت می نویسم یک جاش به مشکل بر خوردم !
ببینید :
با استفاده از دستور زیر یک فایل درست میکنم که وسط اسمش یک space داره :
کد :
touch example\ file
ls -l example\ file
-rw-r--r-- 1 mah454 mah454 0 2011-05-14 10:05 example file
حالا یک function جدید به bash معرفی میکنم :
به این صورت :
کد :
rr () { ls $1 ; }
این کار یک عملی شبیه دستور alias انجام میده .
حالا توی تست مشکل پیدا میکنم :
کد :
rr example\ file
ls: cannot access example: No such file or directory
ls: cannot access file: No such file or directory
می شه بگید چجوری میشه این مشکل رو حل کرد ؟
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-14, 10:24 AM,
ارسال : #2
پاسخ: space in script
کد :
rr 'example file'
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-14, 11:35 AM,
ارسال : #3
پاسخ: space in script
نمیشه ....
اصل قضیه اینه :
ببینید من می خواهم برای دستور rm یک سطل اشغال درست کنم که از این به بعد هر وقت دستور rm رو اجرا کردم فایل ها بره توی یک سطل آشغال .
برای این کار یکم تغییرات توی فایل bashrc ایجاد کردم :
کد :
### Make Trash for "rm" Command
export trash=/home/$USER/.trash

if [ ! -d $trash ] ; then
     mkdir $trash
fi

rm () {
     mv $1 $trash
}
الان هر وقت دستور rm رو به تنهایی اجرا کنیم دستور mv اجرا میشه .
حال مشکل من اینه که این اسکریپت برای فایل های معمولی کار میکنه ولی برای فایل هایی که وسط اسمشان یک فاصله (space) هستش نه !
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-14, 12:56 PM,
ارسال : #4
پاسخ: space in script
فكر كنم اگه اسم متغيرت رو تو اكولاد بزاي درست بشه
کد :
mv ${1} ${trash}
امتحان كن جوابشو بده
(اين كار تو csh و tcsh جواب ميده)

آموزش بدون محدودیت
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-14, 01:18 PM,
ارسال : #5
پاسخ: space in script
نه ...
جواب نمیده !
کد :
mv: cannot stat `example': No such file or directory
اگه بشه خیلی جالب میشه !
آخه یک بار 280G اطلاعاتم سر یک اشتباه به باد فنا رفت !
اشکم رو درآورد ! :cry:
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-14, 01:38 PM,
ارسال : #6
پاسخ: space in script
mah454 به لينك ريز برو شايد كمكت كنه
http://forum.imenpardis.com/viewtopic.php?f=9&t=90
البته اين تاپيك براي csh يا sh هستش.

آموزش بدون محدودیت
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-14, 02:16 PM,
ارسال : #7
پاسخ: space in script
خیلی ممنون که جواب می دهید .
همان طور که می بینید توی این تاپیک که معرفی کردید هم تقریبا از همین روش من استفاده کرده :
کد :
mv $1 ~/.trash/
که این هم مشکل داره ... !
البته در نگاه اول درست کار میکنه . من هم اون بالا گفتم که کار میکنه ولی برای فایل هایی که وسظ اسمشان یک space باشه مشکل داره .

Debian GNU/Linux System Administrator
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-14, 03:22 PM,
ارسال : #8
Re: space in script
mah454 نویسنده :سلام
من دارم یک اسکریپت می نویسم یک جاش به مشکل بر خوردم !
ببینید :
با استفاده از دستور زیر یک فایل درست میکنم که وسط اسمش یک space داره :
کد :
touch example\ file
ls -l example\ file
-rw-r--r-- 1 mah454 mah454 0 2011-05-14 10:05 example file
حالا یک function جدید به bash معرفی میکنم :
به این صورت :
کد :
rr () { ls $1 ; }
این کار یک عملی شبیه دستور alias انجام میده .
حالا توی تست مشکل پیدا میکنم :
کد :
rr example\ file
ls: cannot access example: No such file or directory
ls: cannot access file: No such file or directory
می شه بگید چجوری میشه این مشکل رو حل کرد ؟

آقا مهدی اون مشکل امنیتی که سر دستور find مطرح کرده بودم و بعضی دوستان گفتند که اصلا مهم نیست... این دقیقا همون مشکله!
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-14, 04:02 PM,
ارسال : #9
پاسخ: Re: space in script
آره . همینطور .
درست میگی bsdlinux .
اون موقع من هم این موضوع رو جدی نگرفتم . ولی حق با شما بود .
البته من راه حل این موضوع رو هم پیدا کردم : Linuxquestion + irc #linux
نتیجه شد این :
اسکریپتی که به bashrc اضافه کرده بودم رو به این صورت تغییر دادم .
کد :
### Make Trash for "rm" Command
export trash=$home/.trash

if [ ! -d $trash ] ; then
     mkdir $trash
fi

rm () {
     mv "$@" $trash
}
درست شد .
این هم یک دستور جدید برای کنترل سطل آشغال : (البته هنوز کاملش نکردم )
کد :
#!/bin/bash

function empty_trash {
        rm -rf $HOME/.trash/*
}

function status_trash {
        ls -l $trash
}

case $1 in
        emp)
                empty_trash ;;
        status)
                status_trash ;;
        *)
                echo "Use : {emp|status}" ;;
esac
این اسکریپت رو توی یک فایل به نام trash در مسیر usr/local/bin/ ذخیره کنید .
به زودی یک اسکریپت کاملاتر و دقیقتر رو میزارم Smile
تست کنید
جالب میشه Wink
جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-05-15, 06:48 PM,
ارسال : #10
پاسخ: Re: space in script
کد :
rr () { ls "$1" ; }
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ
2011-06-14, 03:26 AM,
ارسال : #11
 
دوست گرامی کی گفته نمیشه؟
اسکریپت زیر رو نگاه کن:
کد :
#!/bin/bash
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
for i in `ls $1`
do
      echo "$i"
done
  IFS=$SAVEIFS
شما به جای اون echo می‌تونی از cp یا mv یا هر دستوری استفاده کنی ولی دیگه با space در نام فایل‌ها مشکل ندارند. چون IFS رو اونجوری initialize کردیم.
من از for برای کپی فایل‌هام استفاده کردم.

اعتراض به عملکرد دولت در زمینه IT
اینترنت حداقل 5M + یک laptop حق مسلم هر ایرانیست.
مشاهده تارنمای کاربر جستجوی تمامی ارسال های کاربر
نقل قول این ارسال در یک پاسخ


رفتن به انجمن :


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