انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: محمد جواد قدیر در 30 اردیبهشت 1387، 12:25 بظ
-
سلام.
یه مشکلی دارم با این دستور echo که بدجوری حالمو گرفته. آخه زیاد تو استفاده از خط فرمان حرفه ای نیستم.
اول این حالت رو داشته باشید :
echo "text1" >>file.txt
خوب با این دستور من عبارت text1 رو در خط اول فایل file.txt مینویسم. حالا میخوام تو خط دوم عبارت text2 رو بنویسم :
echo "text2" >>file.txt
ولی با این دستور عبارت text2 در ادامه ی عبارت قبلی و در همون خط بالا نوشته میشه.
توی راهنمای این دستور گفته که با آپشن e و استفاده از \n میشه رفت به خط جدید ولی من نتونستم. یعنی خوب نفهمیدم چطوری باید ازش استفاده کنم.
خواهشا راهنمایی کنید.
-
شما از بک اسلش استفاده میکنید. باید از اسلش استفاده کنید. اول / و بعد بدون هیچ فاصلهای n که معنیش میشه «enter».
-
مشکل اینجاست که پیش فرض اش خط جدید هست!
یا من منظور ات رو درست متوجه نشدم؟!
shayne@shayne:~$ cd Desktop/
shayne@shayne:~/Desktop$ echo ice > a
shayne@shayne:~/Desktop$ cat a
ice
shayne@shayne:~/Desktop$ echo ice >> a
shayne@shayne:~/Desktop$ cat a
ice
ice
shayne@shayne:~/Desktop$ echo "ice" >> a
shayne@shayne:~/Desktop$ cat a
ice
ice
ice
shayne@shayne:~/Desktop$ echo "ice" >> a
shayne@shayne:~/Desktop$ cat a
ice
ice
ice
ice
shayne@shayne:~/Desktop$
-
جناب javad33 میخواستن که توی خط جدید فایل ذخیره بشه. در حالی که دستور echo بطور پیشفرض این کارو میکنه. احتمالا اشتباه کردن.
اما اگه خواستید اینطوری هست:
echo -e "line 1\nline 2\nline3" > file.txt
همونطور که گفته شد دستور echo خودش بطور پیشفرض یه اینتر به آخرش اضافه میکنه (یعنی توی دستور بالا بعد از line 3 هم یه کاراکتر سر خط میذاره. یعنی در مجموع سه تا کاراکتر سرخط خواهد داشت) اگه خواستید غیرفعالش کنید میتونید از اوپشن n- استفاده کنید.
echo -ne "line 1\nline 2\nline3" > file.txt
اما اینجا، اون فایل فقط دو تا کاراکتر سر خط خواهد داشت (آخرش نداره).
-
خوب من کامل موضوع رو شرح بدم تا ببینیم کار به کجا میرسه.
اول اینکه یه کلاینتی برای خط فرمان bash توی ویندوز هست به نام cygwin من این عملیات رو تو اون انجام دادم.درسته وقتی دستور cat رو میزنیم همونطور که خودتون هم گفتید هرکدوم از نوشته ها تو خط جدید نوشته میشه. ولی وقتی فایل رو با نت پد باز میکنم همه چی پشت سر همه.
اما تو اوبونتو این مشکل وجود نداره و وقتی فایل رو با gedit باز میکنم هرکدوم تو یه خط جدیده.
کلا تمام این بحثها سر این بود که من میخوام بدون استفاده از ادیتورهای گرافیکی تو خط فرمان برنامه بنویسم.کار با ایمکس رو بلد نیستم. vi رو یه کم یاد گرفتم ولی نه کامل. این دستور echo بنظرم جالب اومد ولی وقتی میخوام مثلا یه خط شبیه زیر بنویسم کلا نمیشه
cout<<"hello\n";
وقتی با echo اینو مینویسم اینجوری میشه :
cout<<hellon;
-
خب این بر می گرده با کاراکتر انتهای خط که هم می تونه cr\ و یا n\ باشه! و تفاوت اشون هم در همینه! اگه درست یادم باشه لینوکس از n استفاده می کنه ولی ویندوز از cr
n ==NewLine
cr ==CariageRetrun
-
ببینید من میخوام از این طریق مثلا یه برنامه به زبان c++ بنویسم و تو یه فایل ذخیره کنم. \n از دستورات خود زبان c++ هست ولی چون echo هم اونو میشناسه مثل اینکه تداخل بوجود میاد و من نمیتونم اینو همینجوری که هست بنویسم. یا مثلا وقتی میخوام از " " استفاده کنم چون echo اینو میشناسه نمیتونم تو فایل متنیم ازش استفاده کنم.
راهی برای حل این مشکل هست؟
-
جواد جان! ویندوز ندارم که تست کنم دقیق بهت راهنمایی کنم! ولی اگه من بودم! اول ی کلاینت دیگه رو تست میکردم! putty هم ظاهر کلاینت خوبی ی!
باقیش هم یکمی سعی و خطا می خواد!
توی تنظیمات کلاینت ات هم ! حالا چ putty و یا cygwin ببین که آیا می تونی کاراکتر انتهای خط رو تغییر بدی یا نه؟!
-
این که نوت پد اون طور که شما می خواید نمایش نمی ده مسئله به همون تفاوت های نیو لاین ویندوز و لینوکس مربوطه نه این که کلاینت سیگوین باشه یا ..
مثلا اگه شما این رو بنویسید و کامپایل کنید، نوت پد اون طور که می خواید نمایش می ده:
#include<iostream>
using namespace std;
int main(){
cout<<"text1\r\ntext2\r\n";
}
ولی اگه او \r ها رو بردارید نوت پد نیولاین نشون نمی ده
( ولی تا جایی که من می دونم تقریبا هر ادیتور دیگه ای \n رو نیولاین نشون می ده. شخصا از اینا مطئنم:
gvim تحت ویندوز،textpad, codewhiz, perl editor ..
)
این کرکتر ها هم نوشته می شه می تونید مثلا یه برنامه بنویسید و چک کنید تا مطمئن بشید
#include<iostream>
using namespace std;
char c;
int main(){
while(cin.get(c))
cout<<(int)c<<" ";
cout<<endl;
}
تداخلی به خاطر echo نیست. ولی اون مسئله که نمی شه با echo توی ویندوز اسپیس رو نوشت یا آپشن هاش با چیزی که توی لینوکس می بینیم فرق داره، چیز دیگری هست که نمی دونم به خاطر کلاینت سیگوین ه یا نه. این لینک ها رو یک نگاهی بندازید شاید به درد بخوره:
http://www.cygwin.com/ml/cygwin/1999-07/msg00254.html (http://www.cygwin.com/ml/cygwin/1999-07/msg00254.html)
http://cygwin.com/ml/cygwin/2003-01/msg01633.html (http://cygwin.com/ml/cygwin/2003-01/msg01633.html)
http://www.khngai.com/emacs/cygwin.php (http://www.khngai.com/emacs/cygwin.php)
-
چیزی که اسما می گه منطقی تره تا راهی که من گفتم! تو ویرایش گر های دیگه هم همین مشکل رو داری؟
-
بابت همه چیز ممنون.
از اینکه وقت گذاشتین و جواب دادین خیلی متشکرم.
مشکل حل شد. بحث نیولاین هم ختم به خیر شد.
این لینک ها رو یک نگاهی بندازید شاید به درد بخوره:
http://www.cygwin.com/ml/cygwin/1999-07/msg00254.html
http://cygwin.com/ml/cygwin/2003-01/msg01633.html
http://www.khngai.com/emacs/cygwin.php
بابت لینکها خیلی خیلی ممنون.
تو ویرایش گر های دیگه هم همین مشکل رو داری؟
تو ویندوز فقط نت پد رو دارم که با اون مشکل داشتم ولی دیگه خدا رو شکر با کمک دوستان حل شد.