انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => انجمن عمومی => نویسنده: masoudk در 31 تیر 1398، 12:01 ب‌ظ

عنوان: دستور which در readlink [حل شد]
ارسال شده توسط: masoudk در 31 تیر 1398، 12:01 ب‌ظ
سلام
من وقتی این دستور رو مینویسم:
which java
خروجی میشه این:
/usr/bin/java
ولی وقتی از این دستور تو readlink استفاده میکنم:
sudo readlink -f $(which java)
خروجی میشه این:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java
سوالم اینجاست که $() به صورت عمومی برای چی استفاده میشه و پشت پرده چه اتفاقاتی می افته که از آدرس اول به آدرس دوم میرسیم.
مرسی
عنوان: پاسخ : دستور which در readlink
ارسال شده توسط: M!lad در 31 تیر 1398، 01:16 ب‌ظ
()$ استفاده می‌شه برای نگارش یک Command Substitution.

در Command Substitution، قبل از اجرای دستور اصلی (در مثال شما readlink) دستوری که درون ()$ قرار گرفته اجرا و خروجیش به عنوان یک پارامتر در مقابل دستور readlink قرار میگیره. و نهایتا دستور readlink با اون پارامتر اجرا میشه.

یعنی چیزی که نهایتا اجرا خواهد شد:

readlink -f /usr/bin/java
هست و readlink آدرس

/usr/bin/java
که یک لینک هست رو دنبال میکنه و فایل اصلی که بهش اشاره می‌کنه رو بر میگردونه.

برای مطالعه بیشتر:

http://www.tldp.org/LDP/abs/html/commandsub.html
و این تنها اتفاقی نیست که قبل از اجرای دستور رخ میده تعدادی expansion دیگر هم وجود داره:

    brace expansion
    tilde expansion
    parameter and variable expansion
    command substitution
    arithmetic expansion
    word splitting
    filename expansion

برای مثال Process Substitution:

ls  <(echo)
/dev/fd/63
عنوان: پاسخ : دستور which در readlink
ارسال شده توسط: masoudk در 31 تیر 1398، 02:07 ب‌ظ
ممنونم