📄 محتوای کامل
نوشتن در فایلها یک کار اساسی در اسکریپتنویسی Bash است. میتوانید از آن برای ذخیره خروجی برنامه، ذخیره ورودی کاربر یا ایجاد فایلهای پیکربندی استفاده کنید. دانستن نحوه نوشتن در یک فایل با استفاده از Bash برای کارهای اتوماسیون و اسکریپتنویسی مفید است.
این مقاله روشهای مختلفی برای نوشتن در فایلها در Bash را پوشش میدهد، از تغییر مسیر ساده گرفته تا استفاده از حلقهها و جایگزینی فرمان برای کارهای پیشرفتهتر.
استفاده از تغییر مسیر خروجی
در Bash، میتوانید از عملگرهای تغییر مسیر خروجی >و >>برای نوشتن در یک فایل استفاده کنید.
بازنویسی فایل با استفاده از>
از این >عملگر برای بازنویسی کامل یک فایل موجود یا ایجاد یک فایل جدید استفاده کنید.
$ echo "Hello from negarnovin!" > output.txt
این دستور:
output.txtاگر وجود نداشته باشد، ایجاد میکند و مینویسدHello from negarnovin!.- اگر فایل وجود داشته باشد، محتوای آن با جایگزین میشود
Hello from negarnovin!.
اضافه کردن به فایل با استفاده از>>
از این >>عملگر برای افزودن دادهها بدون بازنویسی محتوای موجود آنها استفاده کنید.
$ echo "Greetings from negarnovin!" >> output.txt
این خط را Greetings from negarnovin!به انتهای اضافه میکند output.txtو محتوای موجود را حفظ میکند. این به حفظ گزارشها یا ذخیره تدریجی دادهها در یک فایل کمک میکند.
نوشتن خروجی یک دستور در یک فایل
شما میتوانید خروجی هر دستوری را به یک فایل هدایت کنید.
- یک فایل را با خروجی دستور بازنویسی میکند. کنسولکپی
$ ls -l /home/user > bash_file.txt
این دستور لیست فایلهای موجود در
/home/userدایرکتوری را در ذخیره میکند وbash_file.txtمحتوای موجود را جایگزین میکند. - یک فایل به خروجی دستور پیوست کنید. کنسولکپی
$ df -kh >> bash_file.txt
این کار محتوای موجود را نگه میدارد و ورودیهای جدید را به انتهای فایل اضافه میکند.
- همچنین میتوانید هم خروجی استاندارد و هم خطای استاندارد را به یک فایل تغییر مسیر دهید. در Bash،
1stdout و2stderr را نشان میدهد. کنسولکپی$ ls /home/user /nonexistent > bash_output.txt 2>&1
در اینجا،
2>&1خطای استاندارد (stderr) را به همان محل stdout تغییر مسیر میدهد. این کار هنگام گرفتن خروجی کامل دستور، از جمله خطاها، مفید است.
teeبرای نوشتن و نمایش خروجی استفاده میشود
- این
teeدستور به شما امکان میدهد خروجی را هم در ترمینال و هم در یک یا چند فایل بنویسید. کنسولکپی$ echo "Logged line" | tee bash_log.txt
- برای اضافه کردن به جای بازنویسی، از
-aپرچم استفاده کنید. کنسولکپی$ echo "Another line" | tee -a bash_log.txt
این قابلیت هنگام اشکالزدایی یا زمانی که خروجی نیاز به ذخیره و نظارت همزمان دارد، مفید است.
از یک سند اینجا استفاده کنید
Heredoc به شما امکان میدهد متن چندخطی را به یک دستور ارسال کنید. میتوانید از آن به همراه catیا teeبرای نوشتن محتوای چندخطی در یک فایل در Bash استفاده کنید. این دستور با شروع میشود و <<به دنبال آن جداکننده مشخص شده (مثلاً EOF) قرار میگیرد.
cat <<EOF > bash_config.txt server=localhost port=8080 enabled=true EOF
- Heredoc را شروع
<<EOFمیکند وEOFبه عنوان جداکننده تعریف میشود، به این معنی که دستور خط را تا زمانی که با مواجه شود، میخواندEOF. >تغییر مسیر خروجی است .
این دستور bash_config.txtبلوک پیکربندی مشخص شده را ایجاد یا با آن رونویسی میکند.
اگر میخواهید خطوط را به جای رونویسی، اضافه کنید، از >>redirector استفاده کنید.
cat <<EOF >> bash_config.txt # Additional settings log_level=debug EOF
با استفاده از این روش، اسکریپت میتواند فایلهای پیکربندی ساختاریافته تولید کند.
نوشتن در فایل در یک حلقه
شما میتوانید چندین بار درون یک حلقه در یک فایل بنویسید. این برای تولید لاگها یا ایجاد فایلهای ساختاریافته مفید است.
bashکپیfor i in {1..3}; do
echo "Line $i" >> bash_loop_output.txt
done هر تکرار حلقه یک خط جدید به اضافه میکند bash_loop_output.txt.
مدیریت خطاها هنگام نوشتن در فایلها
این بخش نحوه مدیریت اسکریپت را در زمانی که عملیات نوشتن در اسکریپت شما با شکست مواجه میشود، نشان میدهد.
- برای اطمینان از موفقیتآمیز بودن نوشتن، وضعیت خروج دستور را بررسی کنید. bashکپی
echo "Test write" > bashfile.txt if [ $? -eq 0 ]; then echo "Write successful." else echo "Write failed." fiاین
$?متغیر وضعیت خروج دستور قبلی را ذخیره میکند. همچنین میتوانیدset -eقبل از دستور write یک خط اضافه کنید. این کار باعث میشود در صورت عدم موفقیت هر دستوری، اجرای اسکریپت متوقف شود. - همچنین میتوانید قبل از اقدام به نوشتن، مجوزهای فایل را با استفاده از بررسی کنید
-w. bashکپیif [ -w bashfile.txt ]; then echo "Writable" else echo "No write permission" fiاین بررسی میکند که آیا
bashfile.txtقابل نوشتن است یا خیر و بر اساس آن پیامی را خروجی میدهد.
استفاده از توصیف گرهای فایل برای کنترل پیشرفته
اگر اسکریپت شما خروجی را در چندین فایل (یا جریان خروجی) مینویسد، میتوانید با استفاده از execدستور، آنها را با یک مقدار عددی برچسبگذاری کنید. این یک توصیفگر فایل ایجاد کرد. برای بستن آن، باید یک خط اضافه کنید exec <descriptor>&-.
همانطور که قبلاً ذکر شد، در Bash، 1 نشان دهنده stdout و 2stderr است. بنابراین میتوانید به جریانهای خروجی خود مقادیری بزرگتر از اختصاص دهید 2.
exec 3> bash_custom_output.txt echo "Writing with FD 3" >&3 exec 3>&-
- این توصیفگر فایل را
3برای نوشتن باز میکند Writing with FD 3برایش مینویسد .- توصیفگر فایل را میبندد
3.
نتیجه گیری
اکنون شما روشهای مختلف نوشتن در فایلها در Bash را درک میکنید – از تغییر مسیر و خروجی دستور گرفته تا استفاده از teeحلقهها، Heredoc و توصیفگرهای فایل. ترکیب این تکنیکها را برای ساخت اسکریپتهای قدرتمندتر و انعطافپذیرتر تمرین کنید.