نحوه نوشتن در فایل در Bash #
نوشتن در فایلها یک کار اساسی در اسکریپتنویسی 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،
۱stdout و۲stderr را نشان میدهد.کنسول$ ls /home/user /nonexistent > bash_output.txt ۲>&۱
در اینجا،
۲>&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با استفاده از این روش، اسکریپت میتواند فایلهای پیکربندی ساختاریافته تولید کند.
نوشتن در فایل در یک حلقه #
شما میتوانید چندین بار درون یک حلقه در یک فایل بنویسید. این برای تولید لاگها یا ایجاد فایلهای ساختاریافته مفید است.
for i in {۱..۳}; do
echo "Line $i" >> bash_loop_output.txt
doneهر تکرار حلقه یک خط جدید به اضافه میکند bash_loop_output.txt.
مدیریت خطاها هنگام نوشتن در فایلها #
این بخش نحوه مدیریت اسکریپت را در زمانی که عملیات نوشتن در اسکریپت شما با شکست مواجه میشود، نشان میدهد.
- برای اطمینان از موفقیتآمیز بودن نوشتن، وضعیت خروج دستور را بررسی کنید.bash
echo "Test write" > bashfile.txt if [ $? -eq ۰ ]; then echo "Write successful." else echo "Write failed." fi
این
$?متغیر وضعیت خروج دستور قبلی را ذخیره میکند. همچنین میتوانیدset -eقبل از دستور write یک خط اضافه کنید. این کار باعث میشود در صورت عدم موفقیت هر دستوری، اجرای اسکریپت متوقف شود. - همچنین میتوانید قبل از اقدام به نوشتن، مجوزهای فایل را با استفاده از بررسی کنید
-w.bashif [ -w bashfile.txt ]; then echo "Writable" else echo "No write permission" fi
این بررسی میکند که آیا
bashfile.txtقابل نوشتن است یا خیر و بر اساس آن پیامی را خروجی میدهد.
استفاده از توصیف گرهای فایل برای کنترل پیشرفته #
اگر اسکریپت شما خروجی را در چندین فایل (یا جریان خروجی) مینویسد، میتوانید با استفاده از execدستور، آنها را با یک مقدار عددی برچسبگذاری کنید. این یک توصیفگر فایل ایجاد کرد. برای بستن آن، باید یک خط اضافه کنید exec <descriptor>&-.
همانطور که قبلاً ذکر شد، در Bash، ۱ نشان دهنده stdout و ۲stderr است. بنابراین میتوانید به جریانهای خروجی خود مقادیری بزرگتر از اختصاص دهید ۲.
exec ۳> bash_custom_output.txt
echo "Writing with FD 3" >&۳
exec ۳>&-- این توصیفگر فایل را
۳برای نوشتن باز میکند Writing with FD 3برایش مینویسد .- توصیفگر فایل را میبندد
۳.
نتیجه گیری #
اکنون شما روشهای مختلف نوشتن در فایلها در Bash را درک میکنید – از تغییر مسیر و خروجی دستور گرفته تا استفاده از teeحلقهها، Heredoc و توصیفگرهای فایل. ترکیب این تکنیکها را برای ساخت اسکریپتهای قدرتمندتر و انعطافپذیرتر تمرین کنید.