REDO-WHICHDO(1) User Commands REDO-WHICHDO(1)

redo-whichdo - نمایش مسیر جستجوی redo برای یک فایل .do

redo-whichdo <target>

redo(1) و redo-ifchange(1) اهداف خود را با اجرای یک اسکریپت «فایل .do» با آرگومان‌های مناسب می‌سازند. فایل‌های .do با شروع از دایرکتوری حاوی هدف جستجو می‌شوند، و در صورت پیدا نشدن در آنجا، در سلسله‌مراتب درخت دایرکتوری به سمت بالا جستجو می‌شوند تا زمانی که یک مورد منطبق پیدا شود.

برای کمک به اشکال‌زدایی اسکریپت‌هایتان هنگامی که redo از یک فایل .do غیرمنتظره استفاده می‌کند، یا برای نوشتن اسکریپت‌های پیشرفته‌ای که از یک فایل .do به فایل دیگری «پروکسی» می‌شوند، می‌توانید از redo-whichdo برای مشاهدهٔ مسیر جستجوی دقیقی که redo به کار می‌برد، استفاده کنید.

قالب خروجی، فایل‌های .do بالقوه را در هر خط یکی، به ترتیب اولویت و جداشده با نویسه‌های خط جدید فهرست می‌کند، و به محض پیدا شدن یک فایل .do منطبق، متوقف می‌شود. اگر کد بازگشتی صفر باشد، آخرین خطْ یک فایل .do است که در واقعیت وجود دارد؛ در غیر این صورت، کل مسیر جستجو تا انتها بررسی (و چاپ) شده است.

در اینجا یک مسیر جستجوی معمول برای یک فایل منبع (x/y/a.b.o) آمده است. از آنجا که نام فایل شامل دو نقطه (.) است، در هر سطح از سلسله‌مراتب، redo باید default.b.o.do، default.o.do و default.do را جستجو کند. ```sh $ redo-whichdo x/y/a.b.o; echo $?

x/y/a.b.o.do
x/y/default.b.o.do
x/y/default.o.do
x/y/default.do
x/default.b.o.do
x/default.o.do
x/default.do
default.b.o.do
default.o.do
0

`` شما می‌توانید از redo-whichdo برای واگذاری از یک اسکریپت .do به دیگری، با استفاده از کدی شبیه به زیر استفاده کنید. این کار کمی پیچیده است زیرا نه‌تنها یک فایل .do جدید پیدا می‌کنید، بلکه باید با cd به دایرکتوری فایل .do رفته و مقادیر $1 و $2` را به‌طور مناسب تنظیم نمایید.

ofile=$PWD/$3
x1=$1
cd "$SRCDIR"
redo-whichdo "$x1" | {
    ifcreate=
    while read dopath; do
        if [ ! -e "$dopath" ]; then
            ifcreate="$ifcreate $dopath"
        else
            redo-ifcreate $ifcreate
            redo-ifchange "$dopath"
            dofile=${dopath##*/}
            dodir=${dopath%$dofile}
            # Create updated $1 and $2 for the new .do file
            x1_rel=${x1#$dodir}
            ext=${dofile##*default}
            if [ "$ext" != "$dofile" ]; then
                ext=${ext%.do}
            else
                ext=''
            fi
            x2_rel=${x1#$dodir}
            x2_rel=${x2_rel%$ext}
            cd "$dodir"
            set -- "$x1_rel" "$x2_rel" "$ofile"
            . "./$dofile"
            exit
        fi
    done
    exit 3
}

بخشی از مجموعهٔ redo(1).

ایدهٔ اولیهٔ redo توسط D. J. Bernstein خلق شد و در وبگاه او (http://cr.yp.to/redo.html) مستند گردید. این پیاده‌سازی مستقل توسط Avery Pennarun ایجاد شده است و می‌توانید کد منبع آن را در http://github.com/apenwarr/redo بیابید.

redo(1), redo-ifchange(1), redo-ifcreate(1)

Avery Pennarun <apenwarr@gmail.com>

2021-07-27 Redo 0.42d