برنامه نویسی

چگونه خطای اسکریپت Bash را با فضاهایی در مسیرهای پرونده برطرف کنیم؟

اگر تا به حال با استفاده از اسکریپت Bash در Mac OS X Mavericks روبرو شده اید و با مسیرهای دایرکتوری حاوی فضاها با مشکلات روبرو شده اید ، تنها نیستید. در این مقاله ، ما نگاهی دقیق تر به یک مشکل مشترک خواهیم انداخت که هنگام اجرای اسکریپت های BASH که نیاز به استدلال با فضاها دارند ، و چگونگی حل و فصل آن به طور مؤثر ایجاد می شود.

چرا این مسئله رخ می دهد؟

هنگامی که یک اسکریپت Bash پارامترهای خط فرمان را می پذیرد ، هر فضایی در مسیر می تواند منجر به تفسیر نادرست از استدلال ارائه شود. BASH فضاها را به عنوان محدود کننده رفتار می کند ، که رشته را به استدلال های مجزا جدا می کند و در نتیجه اجرای فیلمنامه خطایی می شود. این دقیقاً اتفاقی است که در مورد شما هنگام تلاش برای باز کردن پوشه ای که دارای فضاهایی به نام خود باشد ، اتفاق می افتد.

فیلمنامه Bash Problematic

بیایید فیلمنامه Bash را در مورد آن تجزیه و تحلیل کنیم:

#!/bin/bash
open -a Terminal $1

این اسکریپت سعی دارد با استفاده از آرگومان خط فرمان ارائه شده ، یک دایرکتوری را در یک پنجره ترمینال جدید باز کند. وقتی مسیری را بدون فضاها ارائه می دهید ، کاملاً کار می کند. با این حال ، هنگامی که فضایی را درج می کنید ، مانند “/کاربران/myusername/desktop/پوشه withspaces/” ، این دستور با تفسیر فضا به عنوان جداکننده آرگومان ، شکست می خورد.

راه حل هایی برای رسیدگی به فضاها در استدلال ها

اگر مسیرهای شما دارای فضاهایی هستند ، در اینجا چند راه حل برای اطمینان از اجرای اسکریپت Bash شما به راحتی وجود دارد.

روش 1: به نقل از استدلال

یکی از ساده ترین اصلاحات این است که اطمینان حاصل کنید که دستور شما شامل نقل قول های مربوط به مسیر هنگام تماس با اسکریپت است. نقل قول ها به Bash دستور می دهند که رشته های محصور را به عنوان یک استدلال واحد درمان کند و از ورود آن به قطعات جلوگیری می کند.

در اینجا چگونه باید با اسکریپت خود تماس بگیرید:

$ ./test.sh "/Users/myusername/Desktop/folder withspaces/"

به این ترتیب ، اسکریپت کل مسیر را به عنوان یک آرگومان دریافت می کند و می تواند پنجره ترمینال را مطابق آنچه در نظر گرفته شده باز کند.

روش 2: فرار از فضاهای در مسیر

اگر ترجیح می دهید به جای استفاده از نقل قول از فضاها فرار کنید ، می توانید از یک backslash استفاده کنید (\) قبل از هر فضا در مسیر. به عنوان مثال:

$ ./test.sh /Users/myusername/Desktop/folder\ withspaces/

این به پوسته می گوید که فضا بخشی از نام پوشه است ، نه جداکننده استدلال.

مثال کامل اسکریپت Bash

با استفاده از این تنظیمات ، در اینجا نمونه ای از نحوه نگاه کامل اسکریپت شما هنگام استفاده از نقل قول ها یا فضاهای فرار وجود دارد:

#!/bin/bash

# Open a Terminal window in the specified directory
open -a Terminal "$1"

یا اگر فرار را انتخاب کردید:

#!/bin/bash

# Open a Terminal window in the specified directory
open -a Terminal $1

به یاد داشته باشید که همیشه اسکریپت خود را آزمایش کنید تا از رفتار آن مطابق آنچه انتظار می رود اطمینان حاصل کنید.

سوالات متداول (متداول)

Q1: اگر مسیر من دارای چندین فاصله باشد ، چه کاری باید انجام دهم؟
پاسخ: شما می توانید به سادگی کل مسیر را در نقل قول ها محصور کنید یا از هر فضا با یک پشتی فرار کنید.

Q2: آیا می توانم اسکریپت را برای رسیدگی به مسیرها بدون فضاها به طور خودکار اصلاح کنم؟
پاسخ: در حالی که با افزودن منطق برای رسیدگی به فضاها امکان پذیر است ، ممکن است هنگام تماس با اسکریپت به طور مداوم از نقل قول ها یا فرار ها استفاده کنید.

Q3: آیا این مسئله در سایر زبانهای برنامه نویسی متداول است؟
پاسخ: بله ، بسیاری از زبانهای برنامه نویسی فضاها را به عنوان محدود کننده ، شبیه به Bash تفسیر می کنند. هر کدام روش خود را برای دستیابی به فضاها ، که اغلب از نقل قول ها یا شخصیت های فرار استفاده می کنند ، دارد.

پایان

برخورد با فضاها در مسیرهای پرونده یک مسئله مشترک در دستورات اسکریپت Bash و پوسته است. با استفاده از نقل قول ها یا backslashes ، می توانید هنگام اجرای اسکریپت ها در Mac OS X Mavericks ، به طور موثری از خطاها جلوگیری کنید. به یاد داشته باشید ، تهیه استدلال های خط فرمان واضح و متفکر برای اجرای صاف اسکریپت های Bash شما بسیار مهم است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا