وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

مسیر مطلق یک اسکریپت را در Bash دریافت کنید

0 7
زمان لازم برای مطالعه: 4 دقیقه


مسیر مکانی برای یک دایرکتوری یا یک فایل است. دو نوع مسیر متمایز در لینوکس وجود دارد – مطلق و نسبی. مسیر نسبی با استفاده از دایرکتوری فعلی تعیین می شود. از سوی دیگر، مسیر مطلق، مسیر کامل یک فایل یا دایرکتوری است. مسیر کامل، به ویژه، از دایرکتوری ریشه مشخص می شود. یک راه آسان برای به خاطر سپردن استفاده از / است. یک مسیر نسبی با / (پوشه ریشه) شروع نمی شود. در این آموزش یاد می گیریم که چگونه مسیر مطلق یک اسکریپت را در Bash بدست آوریم.

مسیر مطلق

برای شروع، اجازه دهید یک دایرکتوری ساده، زیر شاخه ها و فایل ها ایجاد کنیم.

مسیر مطلق یک اسکریپت را در Bash دریافت کنید

در این مثال، اگر LinuxHint دایرکتوری فعلی ما باشد، مسیر مطلق فایل script.sh این است:

/خانه/کالیانی/دسکتاپ/LinuxHint/پروژه 2/script.sh

مسیر نسبی ما این است:

پروژه 2/script.sh

چیزی که در اینجا می توانید متوجه شوید این است که برای بازیابی فایلی به نام script.sh، اگر یک مسیر مطلق داشته باشیم، می توانیم آن را از هر کجای اکوسیستم لینوکس بازیابی کنیم. مسیر نسبی ما چندان انعطاف پذیر نیست. آی تی، روی از طرف دیگر بستگی دارد روی دایرکتوری کاری فعلی در مورد قبلی، اگر در دایرکتوری LinuxHint بودیم، و دایرکتوری فعلی ما بود، برای دسترسی به script.sh، باید Project2/script.sh را تایپ کنیم. توجه کنید که چگونه / در ابتدای مسیر نسبی وجود ندارد.

هدف ما بازیابی آدرس یا مسیر کامل اسکریپت (مسیر مطلق).sh با یک مسیر نسبی است.

پیوند خواندن

یکی از دستوراتی که می توانید برای گرفتن آدرس کامل یک فایل یا یک فایل اجرایی استفاده کنید readlink است. Readlink معمولاً برای ثبت مسیر یک پیوند نمادین یا یک فایل متعارف استفاده می شود. با این حال، readlink همچنین می تواند مسیر مطلق داده شده در یک مسیر نسبی را محاسبه کند. در همه موارد، باید یک پرچم را به readlink ضمیمه کنید. رایج ترین پرچم مورد استفاده در چنین مواردی پرچم f است.

مثال شماره 1 – پیوند خواندن با استفاده از پرچم f

script.sh
#!/صندوقچه/bash

مسیر=’لینک خواندن ${BASH_SOURCE:-$0}“‘

DIR_PATH=’dirname مسیر $

اکو “مسیر مطلق است” مسیر $
اکو ‘———————————————
اکو “مسیر دایرکتوری است” $DIR_PATH

مسیر مطلق یک اسکریپت را در Bash دریافت کنیدمسیر مطلق یک اسکریپت را در Bash دریافت کنید

به طور معمول، $0 برای دریافت مسیر اسکریپت استفاده می شود. با این حال، این همیشه کار نمی کند. بنابراین یک راه مطمئن تر یا قوی تر برای بدست آوردن مسیر نسبی اسکریپت استفاده از ${BASH_SOURCE:-$0} است.

پیشنهاد می‌کنیم بخوانید:  استفاده از Regex در عبارات Bash Case

برای یک مثال فرض کنید که من echo ${BASH_SOURCE:-$0} را می‌نویسم، نتیجه‌ای که دریافت می‌کنم ./script.sh است. این مسیر غیر مطلق فایل اسکریپت فعلی ما است. به عبارت دیگر، مکان اسکریپت در حال اجرا در ${BASH_SOURCE:-$0} ذخیره می شود.

مسیر مطلق یک اسکریپت را در Bash دریافت کنیدمسیر مطلق یک اسکریپت را در Bash دریافت کنید

هنگامی که مسیر اسکریپت را به طور قابل اعتماد واکشی کردیم، می‌توانیم آن را با پرچم f به readlink منتقل کنیم. پس از آن می توانیم از دستور dirname برای واکشی مسیر دایرکتوری استفاده کنیم. دستور dirname آخرین مقدار مسیر را حذف می کند و بقیه را برمی گرداند.

بنابراین اگر مسیری از /home/kalyani/Desktop/LinuxHint/Project2/script.sh داشته باشیم و dirname را به آن اعمال کنیم، /home/kalyani/Desktop/LinuxHint/Project2 را دریافت می کنیم. این باعث حذف نام پایه یا نام اسکریپت از آدرس یا مسیر شد.

Realpath

دستور دیگری که می توان از آن استفاده کرد realpath است. Realpath یک دستور لینوکس است که برای چاپ نام فایل مطلق حل شده استفاده می شود. مستلزم آن است که همه مؤلفه ها به جز آخرین مؤلفه وجود داشته باشند.

script.sh
#!/صندوقچه/bash

مسیر=$(مسیر واقعی”${BASH_SOURCE:-$0})
اکو “مسیر مطلق است” مسیر $

اکو “———————————–“

DIR_PATH=$(dirname مسیر $)
اکو “مسیر دایرکتوری است” $DPATH

مسیر مطلق یک اسکریپت را در Bash دریافت کنیدمسیر مطلق یک اسکریپت را در Bash دریافت کنید

در اینجا، یک بار دیگر، مسیر اسکریپت را با استفاده از ${BASH_SOURCE:-$0} دریافت می‌کنیم. Realpath مسیر کامل را برای شما واکشی می کند و dirname تمام مقدار مسیر مطلق به جز آخرین مقدار را دریافت می کند.

جایگزین شماره 1

حالا فرض کنید که شما امتیاز استفاده از realpath یا readlink را نداشتید. با همه سیستم های لینوکس نمی آید! من به اندازه کافی خوش شانس بودم که از اوبونتو استفاده می کردم و بنابراین می توانستم به آن دسترسی داشته باشم. با این حال، یک راه طولانی برای انجام همین کار به شرح زیر است:

script.sh
#!/صندوقچه/bash

DIR_PATH=$(سی دی $(dirname${BASH_SOURCE:-$0}) && pwd)

مسیر=$DIR_PATH/$(نام پایه${BASH_SOURCE:-$0})

اکو “مسیر مطلق است” مسیر $
اکو “———————————–“
اکو “مسیر دایرکتوری است” $DIR_PATH

مسیر مطلق یک اسکریپت را در Bash دریافت کنیدمسیر مطلق یک اسکریپت را در Bash دریافت کنید

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

پیشنهاد می‌کنیم بخوانید:  مثال های حلقه while BASH

بازیابی مسیر یک اسکریپت دیگر (غیر از خود)

در مثال های قبلی، مسیرهای مطلق و دایرکتوری خود فایل اسکریپت را بازیابی کردیم. اگر بخواهیم مسیرهای مطلق و دایرکتوری یک فایل غیر از اسکریپتی که در آن کار می کنیم (غیر از خود) را بازیابی کنیم، چه؟

مسیر مطلق یک اسکریپت را در Bash دریافت کنیدمسیر مطلق یک اسکریپت را در Bash دریافت کنید

بنابراین در اینجا، ما یک فایل جدید به نام script2.sh ایجاد کرده‌ایم، و می‌خواهیم مسیرهای مطلق و دایرکتوری script2.sh را دریافت کنیم.

در script.sh:

script.sh
#!/صندوقچه/bash

مسیر=$(realpath script2.sh)
اکو “مسیر مطلق است” مسیر $

اکو “———————————–“

DIR_PATH=$(dirname مسیر $)
اکو “مسیر دایرکتوری است” $DPATH

مسیر مطلق یک اسکریپت را در Bash دریافت کنیدمسیر مطلق یک اسکریپت را در Bash دریافت کنید

هر یک از روش های قبلی باید در اینجا نیز کار کند. با این حال، در اینجا، ما از مسیر نسبی script2.sh برای بازیابی مسیر مطلق استفاده خواهیم کرد.

بازیابی مسیر یک فرمان

اکنون، می توانید مسیرهای مطلق و دایرکتوری هر اسکریپت و دستورات را دریافت کنید. بیایید برای لحظه ای فرض کنیم که می خواهیم مسیرهای مطلق و دایرکتوری دستور ls را بدست آوریم. می نوشتیم:

script.sh
#!/صندوقچه/bash

مسیر=$(که ls)
اکو “مسیر مطلق است” مسیر $

اکو “———————————–“

DIR_PATH=$(dirname مسیر $)
اکو “مسیر دایرکتوری است” $DIR_PATH

مسیر مطلق یک اسکریپت را در Bash دریافت کنیدمسیر مطلق یک اسکریپت را در Bash دریافت کنید

مسیر آدرسی است که برای مکان یابی یک فایل یا یک پوشه استفاده می شود. مسیر مطلق یک آدرس یا مکان کامل است به طوری که مهم نیست کجا هستید، می توانید فایل مورد نظر خود را بازیابی کنید. از طرف دیگر، یک مسیر نسبی در رابطه با دایرکتوری کاری فعلی تعیین می شود. که در bash، چندین راه برای بازیابی آدرس کامل یک اسکریپت وجود دارد. به طور خاص، ما می توانیم از realpath، readlink یا حتی اسکریپت کوچک سفارشی خود استفاده کنیم. هنگامی که می خواهیم مسیر دایرکتوری را بدانیم، می توانیم از دستور dirname در ما استفاده کنیم bash اسکریپت برای بازیابی مسیر دایرکتوری ما. به دست آوردن آدرس کامل با استفاده از یک آدرس نسبی کاملاً آسان است.

کد نویسی مبارک!

برای نگارش بخشهایی از این متن ممکن است از ترجمه ماشینی یا هوش مصنوعی GPT استفاده شده باشد
لطفا در صورت وجود مشکل در متن یا مفهوم نبودن توضیحات، از طریق دکمه گزارش نوشتار یا درج نظر روی این مطلب ما را از جزییات مشکل مشاهده شده مطلع کنید تا به آن رسیدگی کنیم

زمان انتشار: 1402-12-30 01:38:05

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید